Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?
Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?
问题症状描述
- Activity 在AndroidManifest.xml里设置
android:windowSoftInputMode="adjustPan" - 在ListView里绘制Item
- Item控件为EditText
- EditText设置InputType为Number
- 当在Android 7.0系统上,点击EditText时,弹出的软键盘为“数字”输入模式,但是瞬间就会切换到“全键盘”模式。
在7.0之前的系统,都没有出现这种问题。
尝试性解决方案(风险未评估)
/**
* 尝试性修复了在ListView里显示EditText InputType为 其它非text 类型时,弹出的软键盘会从数字键盘自动切换为 英文全键盘 的问题。
*/
class ListViewEx2 extends ListView
{
public ListViewEx2(final Context context)
{
super(context);
}
public ListViewEx2(final Context context, final AttributeSet attrs)
{
super(context, attrs);
}
public ListViewEx2(final Context context, final AttributeSet attrs, final int defStyleAttr)
{
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ListViewEx2(final Context context, final AttributeSet attrs, final int defStyleAttr, final int defStyleRes)
{
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onLayout(final boolean changed, final int l, final int t, final int r, final int b)
{
//XXX:经过初步测试,只有在Android 7.0平台以上的系统才会出现软键盘自动切换的问题。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && changed)
super.onLayout(changed, l, t, r, b);
else
super.onLayout(changed, l, t, r, b);
}
}
ListView.java 源码对比
Android 版本名称: Nougat API Level: 24 ListView.java 在线查看
Android 7.0 部分可疑的改动过的源码
private class FocusSelector implements Runnable {
// the selector is waiting to set selection on the list view
private static final int STATE_SET_SELECTION = 1;
// the selector set the selection on the list view, waiting for a layoutChildren pass
private static final int STATE_WAIT_FOR_LAYOUT = 2;
// the selector's selection has been honored and it is waiting to request focus on the
// target child.
private static final int STATE_REQUEST_FOCUS = 3;
public void run() {
if (mAction == STATE_SET_SELECTION) {
setSelectionFromTop(mPosition, mPositionTop);
mAction = STATE_WAIT_FOR_LAYOUT;
} else if (mAction == STATE_REQUEST_FOCUS) {
final int childIndex = mPosition - mFirstPosition;
final View child = getChildAt(childIndex);
if (child != null) {
child.requestFocus();
}
mAction = -1;
}
}
}
}
Android 版本名称: Marshmallow API Level: 23 ListView.java 在线查看
Android 6.0 部分可疑的改动过的对应旧版本源码
private class FocusSelector implements Runnable {
public void run() {
setSelectionFromTop(mPosition, mPositionTop);
}
}
参考资料
Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?的更多相关文章
- (转载) EditText初始不弹出软键盘,只有光标显示,点击再弹出
EditText初始不弹出软键盘,只有光标显示,点击再弹出 2013-06-08 10:13 21305人阅读 评论(5) 收藏 举报 分类: android基础(91) 版权声明:本文为博主原创 ...
- Android 软键盘弹出时把原来布局顶上去的解决方法
键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: <activity android:name=& ...
- Android软键盘弹出时布局问题
最近项目需要做一个类似聊天室的模块,基于Socket实现的,这部分稍后一段时间再做总结,功能上的相关点都实现了小例子也做出来了,最后发现一个比较腻歪的问题就是软键盘弹出时总是会把标题“挤出”屏幕,(无 ...
- android软键盘弹出引起的各种不适终极解决方案
android软键盘弹出引起的各种不适终极解决方案 以下描述如何解决ListView高度小于0时出现的UI问题. 创建RelativeLayout的子类TxrjRelativeLayout publi ...
- Android 软键盘弹出,界面整体上移
在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出:现在问题出来了,android软键盘弹出的时候,android整个界面上移,布局被挤压,很难看:要解决这个问题,我们需要用到 windowSo ...
- Android中软键盘弹出时关于布局的问题
当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncre ...
- Android中软键盘弹出时底部菜单上移问题
当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncrea ...
- Android软键盘弹出,覆盖h5页面输入框问题
之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位 ...
- android控制软键盘弹出方式
android一把自带的软键盘弹出方式是会将布局顶上去,造成UI乱套的情况. 解决办法:方法一:在你的activity中的oncreate中setContentView之前写上这个代码getWindo ...
随机推荐
- AOJ 2230 How to Create a Good Game(费用流)
[题目链接] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2230 [题目大意] 给出一张图,从1到n的最长路不变的情况下, 还能 ...
- 【DFS序】【线段树】bzoj4034 [HAOI2015]T2
分开维护树的入栈序和出栈序,用两棵线段树.回答时就是用一颗的减去另一棵的. #include<cstdio> #include<algorithm> using namespa ...
- Problem J: 零起点学算法34——3n+1问题
#include<stdio.h> int main() { ; int n; scanf("%d",&n); ) { ==) n=n*+; else n/=; ...
- 现在就可以使用的5个 ES6 特性
小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...
- zk watch机制及创建node机制
Watch(监视) 当指定的znode或znode的子数据更改时,监视器会显示通知.你只能在 get 命令中设置watch. 语法 get /path [watch] 1 示例 get /FirstZ ...
- 【POI】修改已存在的xls,新添一列后,再保存本文件+获取最大有效行号+获取单元格内容
使用POI版本: ① ② ③ ④ package com.poi.dealXlsx; import java.io.File; import java.io.FileInputStream; impo ...
- CSS3:box-sizing 怪异盒模型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python的 json.dumps 中文编码
python的 json.dumps 中文编码 # -- coding: utf-8 -- 的作用:文件内容以utf-8编码 json.dumps 序列化时对中文默认使用的ascii编码, print ...
- npm install -S -D -g 有什么区别
npm install module_name -S 即 npm install module_name --save 写入dependencies npm install modu ...
- 阿里云部署Java web项目初体验
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了怎样在阿里云上安装JDK.Tomcat以及其配置过程. 最后以一个实例来演 ...