有关安卓listView里面多个EditText光标获取及软键盘显示切换消失问题
来源:互联网 发布:毕业设计的要求与数据 编辑:程序博客网 时间:2024/05/29 12:43
问题描述:
在公司做项目的时候,需要用到多个editText来设置值并进行保存操作,正常来说,我们进入该界面是不显示软键盘的,这些相信大家都知道怎么设置光标
相关问题了。然后进入界面,正常逻辑是我们在点击editText的时候,光标显示在editText上,并且软键盘弹出,当点击editText以外的其他区域时,软键盘消失
,通常情况下,我们都是重写
onTouchEvent
事件进行软键盘隐藏显示操作,在这里操作的话,好处就是只要软键盘显示着,切换其他editText也不会每次隐藏再显示软键盘,而使用
dispatchTouchEvent
则会每次点击editText都会隐藏再显示软键盘,这样会造成用户体验不好。而使用onTouchEvent则会造成点击editText以外区域会隐藏不了软键盘。即使我们写了如下代码进行判断也是一样:
/** * 判断是否intanceof EditText * * @param v * @param ev * @return */boolean isHideInput(View v, MotionEvent ev) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationInWindow(l); int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); if (ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom) { return false; } else { return true; } } return false;}
@Overridepublic boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub InputMethodManager imm = (InputMethodManager) mCxt.getSystemService(INPUT_METHOD_SERVICE); View v = getCurrentFocus(); if (event.getAction() == MotionEvent.ACTION_DOWN) { if (isHideInput(v, event)) { imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } return super.onTouchEvent(event);}使用onTouchEvent点击editText以外区域软键盘不会隐藏,
使用dispatchTouchEvent则每次点击editText都会显示再隐藏。
这里就该使用另外一种 方式来点击editText进行软键盘的显示和隐藏了,代码如下:
void setHideOrShowSoftInput(View v) { if (!(v instanceof EditText)) { v.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { hideSoftKeyboard(AppSettingActivity.this); mHolder.ll_settings.setFocusable(true); mHolder.ll_settings.requestFocus(); return false; } }); } if (v instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) v).getChildCount(); i++) { View innerView = ((ViewGroup) v).getChildAt(i); setHideOrShowSoftInput(innerView); } }}
public void hideSoftKeyboard(Activity activity) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity .INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);}然后调用的话,在初始化控件的时候调用即可。下面是一些软键盘相关的属性了解。
软键盘显示的调整
Android定义了一个属性,名字为windowSoftInputMode, 这个属性用于设置Activity主窗口与软键盘的交互模式,用于避免软键盘遮挡内容的问题。我们可以在AndroidManifet.xml中对Activity进行设置。如:android:windowSoftInputMode=”stateUnchanged|adjustPan”。
该属性可选的值有两部分,一部分为软键盘的状态控制,控制软键盘是隐藏还是显示,另一部分是Activity窗口的调整,以便腾出空间展示软键盘。
android:windowSoftInputMode的属性设置必须是下面中的一个值,或一个”state”值加一个”adjust”值的组合,各个值之间用 | 分开。
- stateUnspecified-未指定状态:当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。
- stateUnchanged-不改变状态:当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。
- stateHidden-隐藏状态:当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。
- stateAlwaysHidden-总是隐藏状态:当设置该状态时,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。
- stateVisible-可见状态:当设置为这个状态时,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制弹出来出来。
- stateAlwaysVisible-总是显示状态:当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。
- adjustUnspecified-未指定模式:设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会根据界面选择不同的模式。
- adjustResize-调整模式:该模式下窗口总是调整屏幕的大小用以保证软键盘的显示空间;这个选项不能和adjustPan同时使用,如果这两个属性都没有被设置,系统会根据窗口中的布局自动选择其中一个。
- adjustPan-默认模式:该模式下通过不会调整来保证软键盘的空间,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的视野范围里面,从而让用户可以看到自己输入的内容。
0 0
- 有关安卓listView里面多个EditText光标获取及软键盘显示切换消失问题
- listview+edittext 光标消失问题
- ListVIew EditText 软键盘 光标
- 关于ListView、EditText、光标、和软键盘
- android EditText自定义软键盘光标问题
- EditText 不显示光标 光标消失
- 手动显示光标及软键盘
- 关于ListView中EditText点击弹出软键盘及软键盘弹出后的焦点问题
- EditText只显示光标不弹出软键盘的方法
- 禁止Edittext弹出软键盘并且使光标正常显示
- android Edittext 监听软键盘弹出显示和消失隐藏
- Android Edittext软键盘光标
- EditText 设置光标位置及点击屏蔽软键盘
- EditText获取焦点并显示软键盘
- 安卓解决listview的item嵌套多个edittext的问题
- android 多个EditText光标的问题
- 安卓EditText密码切换显示
- Android 禁止editText弹出软键盘(带光标) 并解决其他editText弹出软键盘后 切换回来 小键盘隐藏
- 系统的简单注解
- 基于redis分布式缓存实现
- Android ActionBar学习(二) -- 自定义ActionBar Style
- 关于在VS2013中添加头文件和lib的路径
- 在Unity3d中使用GZip来压缩传输数据
- 有关安卓listView里面多个EditText光标获取及软键盘显示切换消失问题
- Caffe源码解析1:Blob
- as 引用库 jar arr os module
- jquery通知插件toastr
- 提高OCR质量的技巧之区域未正确检测
- unsigned int 型数据相减
- SQL语句
- CentOS7 使用命令行Webdav客户端连接OwnCloud、NextCloud
- c++作业4