Android软键盘基础总结(一)

一年多时间以来,一直在学习,去从来疏于整理,搞得知识点好凌乱,是时候开始做个总结啦,一步步来,从基础深入吧。

今天就讲解Android的软键盘windowSoftInputMode属性:其中有adjustXX共5个合stateXX共6个;加起来就是10个;

adjustXX这一系列的属性在测试中发现是通过调整窗体/窗体里面的某些属性来显示软件盘的。注意:这一系列模式只在

有输入必要的时候才会弹出软键盘

adjustResize:activity总是会被调整大小,来确保软键盘可以显示出来,并且不一定关心当前焦点

和输入内容是否可见,activity被打开的时候会默认第一个EditText获得焦点,弹出键盘;其中:

1、当前activity没有使用纵向滑动的控件时候,如果获取焦点的EditText在软键盘弹出可以覆盖的地方时候,当前activity

会把调整大小留出足够软键盘显示的空间,然而当前焦点和输入内容是无法看到的,如图:

看到了吧第9葛EditText得高度都被调整,压缩了。

2、当前activity拥有使用纵向滑动的控时候,如果获取焦点的EditText在软键盘弹出可以覆盖的地方时候,当前activity

不但会调整大小留出空间显示软键盘,并且当前的焦点和输入内容是可见的,如图:

adjustPan:当前activity不是通过调整activity大小来确保软键盘的显示,而是通过调整布局确保获得焦点和输入内容是可见的,

打开activity的时候默认第一个edittext获得焦点,但是软键盘不会自动打开;

1、当没有纵向滚动布局的时候,会把当前焦点以上的布局顶上去,来确保焦点可见;

2、当用有纵向滚动布局的时候,会把当前焦点以上的布局顶上去,并且有时可以通过滑动来看到上面的布局有时可以通过滑动来看到

焦点一下的布局(这是我用小米测试的效果);

如图:第一个没有滚动布局,第二,三个有滚动布局(第二张是可以向上滑,第三张可以向下滑)

     

adjustUnspecified:软键盘的默认模式,从字面意思来看是不指定显示和隐藏模式,在这种情况下activity会根据

不同的情况来选择软键盘的显示模式;

1、当没有纵向滑动控件的时候,activity软键盘的显示选择adjustPan模式,在没有纵向滚动控件的时候软键盘的显示方式和

adjustPan的情况(1)没有滚动控件时候是一样的把布局顶上去,不会弹出软件盘;

2、当有纵向滚动控件时候,activity软键盘的显示选择adjustResize模式,而且和adjustResize的情况(2)有滚动控件时候

是一样的,并且会弹出软件盘,注意的是在该情况下回弹出软件盘

adjustNothing:选择了这种模式的以后会发现,这个模式发现相当于或者说其实就是软键盘在布局上一层挡住了

布局不会改变布局的属性,并且软键盘无论是否有滚动的控件,当前activity都不关心焦点是否可见,也不会默认

弹出软件盘。

stateXX这一系列是通过改名状态来控制软件盘的显示隐藏的,注意:这个系列的模式是关系当前焦点可见的,也就是说

软键盘弹出来的时候,不会遮挡焦点

stateHidden:顾名思义就是隐藏软件软键盘,而且不管上个界面是否有打开软件软件,在当前界面打开的

时候也是会把软键盘隐藏起来的,并且

stateAlwaysHidden:任何情况下都会隐藏软键盘,实话说这个真没看出和stateHidden有什么不一样,希望

有高人指点一下

stateVisible:这个模式不管什么情况对话强行弹出软件盘,不管是否有输入框,作用仅在当前界面,如下图:

stateAlwaysVisible:这个模式不管什么情况对话强行弹出软件盘,不管是否有输入框,而且如果跳转到下个界面

的时候,下个界面没有输入框,软键盘也不会消失,也就是说它的作用不仅仅在当前页面的

stateUnchanged:这个模式就是对软键盘的状态不做改变,如果在上一个/下一个界面中软件是什么状态,到了当前

界面仍然保留过去的界面的软键盘状态,隐藏的继续隐藏,显示的继续显示

stateUnspecified:从字面意思来看就是没有指定,默认情况下使用这种方法来作交互,如果当前界面没有输入必要

(没有输入控件)或者说有输入控件但没有滚动控件的时间,软键盘就会不显示,如果两个条件都满足的话就显示

软键盘。

若有其他的看法或是更加准确的理解,请指点

时间: 2024-08-03 03:01:53

Android软键盘基础总结(一)的相关文章

完美解决android软键盘监听

最近在做应用性能调优,发现在一个包含有输入框的Activity中,当软键盘弹出的时候,如果直接finish掉此Activity,那么在返回到上一个Activity时,界面的渲染会由于软键盘没有及时的收起而出现卡顿的情况. 很不友好. 于是,本着geek的精神,做就做到极致,就尝试着对这一块做优化. 借助网上一些知识的分享,同时结合自己的理解,最终应用到项目中. 直接上代码.. 首先,在manifest文件中声明此Activity的windowSoftInputMode属性, 1 android:

android软键盘弹出引起的各种不适终极解决方案

很多写登录界面的开发者都会遇到一个问题:那就是在登录界面时,当你点击输入框时,下边的按钮有时会被输入框挡住,这个不利于用户的体验,所以很多人希望软键盘弹出时,也能把按钮挤上去.很多开发者想要监听键盘的状态,这无疑是一个很麻烦的做法. 我们可以在AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize" ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点

Android软键盘弹出,布局移动

在项目的androidmanifest.xml文件中界面对应的<activity>里加入 android:windowsoftinputmode="adjustpan"这样键盘就会覆盖屏幕.. 如果不想键盘覆盖屏幕,想让屏幕整体上移,就加入属性android:windowsoftinputmode="statevisible|adjustresize" Android软键盘弹出,布局移动,布布扣,bubuko.com

Android软键盘隐藏,遮挡EidtText解决办法

一.自动弹出软键盘 Timer timer=new Timer(); timer.schedule(new TimerTask() { public void run() { InputMethodManager inputMethodManager=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(0, InputMethodManage

android 软键盘在全屏下的布局计算问题

在非全屏模式下,将activity的windowSoftInputMode的属性设置为:adjustResize.同时在View的onSizeChanged(int w, int h, int oldw, int oldh)里可以得到变化后的尺寸,然后根据前后变化的结果来计算屏幕需要移动的距离. 但是在全屏模式下,即使将activity的windowSoftInputMode的属性设置为:adjustResize.在键盘显示时它未将Activity的Screen向上推动,所以你Activity的

【转载】android软键盘的一些控制

原文地址:http://blog.csdn.net/wang_shaner/article/details/8467688 "EditText + Button"  形成一个 "输入+按键响应" 的案例在android编程中是最常见不过的了. 但还有一些细节需要注意: 在EditText输入后,点击Button进行请求,软键盘应该自行消失 在EditText输入后,不点击Button进行请求,而是直接点击软键盘上的"回车",那么也应该能够正常响应

完美解决android软键盘监听1

最近在做应用性能调优,发现在一个包含有输入框的Activity中,当软键盘弹出的时候,如果直接finish掉此Activity,那么在返回到上一个Activity时,界面的渲染会由于软键盘没有及时的收起而出现卡顿的情况. 很不友好. 于是,本着geek的精神,做就做到极致,就尝试着对这一块做优化. 借助网上一些知识的分享,同时结合自己的理解,最终应用到项目中. 直接上代码.. 首先,在manifest文件中声明此Activity的windowSoftInputMode属性,      andro

关于android软键盘enter键的替换与事件监听

android软键盘事件监听enter键 软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有 normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone, 例如当值为actionNext时enter键外观变成一个向下箭头,而值为actionDone时enter键外观则变成了“完成”两个字. 我们也可以重写enter的事件,方法如下 Jav

android 软键盘回车键捕获

EditText editText2 = (EditText)findViewById(R.id.txtTest2); editText2.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { if (arg1 == EditorInfo.IME_ACTION_UNSPECI