Android之手机电脑软键盘盘与界面的关系

android点击返回键收起软键盘时,键盘原来覆盖的部分显示手机界面。
[问题点数:90分]
本版专家分:125
结帖率 83.33%
CSDN今日推荐
本版专家分:125
本版专家分:593
本版专家分:409
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
其他相关推荐Android软键盘与界面内容的坑
*******这是开发上个项目时遇到的有点问题,之前写过笔记,现在整理到博客上*********
1.遇到的问题
*用户注册页面,这个问题基本只要写过这个页面都会碰到,注册页面有多个EditText用来录入用户信息,够用情况下直接使用一个线性布局,其他属性不设置时呼出软键盘,系统会自动帮我们将页面内容往上推,使当前获取焦点的输入框刚好在软键盘上面。这个效果没有啥问题,但是!当你输入框很多,屏幕放不下时,把他们全部放入ScrollView,你就会发现底下的输入框获取焦点时并不会滚上来了。这时候你就需要关心软键盘输入模式了。
*项目中直播页面有聊天互动,如果聊天输入框获取焦点时再把内容区域顶出屏幕,那就没法看了,所以也需要调整软键盘输入模式。
2.关于软键盘输入模式的几个值
stateUnspecified-未指定状态:当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。
stateUnchanged-不改变状态:当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。
stateHidden-隐藏状态:当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。
stateAlwaysHidden-总是隐藏状态:当设置该状态时,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。
stateVisible-可见状态:当设置为这个状态时,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制弹出来出来。
stateAlwaysVisible-总是显示状态:当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。
adjustUnspecified-未指定模式:设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会根据界面选择不同的模式。
adjustResize-调整模式:该模式下窗口总是调整屏幕的大小用以保证软键盘的显示空间;这个选项不能和adjustPan同时使用,如果这两个属性都没有被设置,系统会根据窗口中的布局自动选择其中一个。
adjustPan-默认模式:该模式下不会通过调整屏幕大小来保证软键盘的空间,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的视野范围里面,从而让用户可以看到自己输入的内容。
可以单独设置一个值或是state值和adjust值组合,使用时在 manifest文件对应activity 声明属性
windowSoftInputMode
3.解决问题
其实软键盘的本质就是一个Dialog,当我们点击输入框时,系统对活动主窗口进行调整,从而为软键盘腾出相应的空间,然后将该Dialog显示在底部。不设置时是由系统帮我们选取,遇到问题时我们就需要针对自己的情况强制指定了。
*第一个问题很好解决,直接设置Activity的 windowSoftInputMode为adjustPan 或者adjustResize 都可以使ScrollView滚动 输入框在软键盘之上,那么问题来了,这两种值设置有什么区别呢?adjustResize-调整模式:该模式下窗口总是调整屏幕的大小用以保证软键盘的显示空间,调整屏幕大小的意思就是说软键盘呼出以后,实际页面内容显示的区域只有键盘上面一部分了,就像问题中的,我的ScrollView被挤到了屏幕上半部分,简单说就是当前页面大小变小了,但是还能完整显示页面,与之对应的adjust模式中,页面大小没有被修改,只是被强制滑动,使输入框刚好滑动到了软键盘上方。这时候如果软键盘覆盖区域还有内容,你想要在键盘呼出状态下看到下面的内容是不行的。
*第二个问题,效果可以参考所有直播软件(我们这里分三个部分,1是VideoView,2是ViewPager做互动区域,3是输入框 )。根据上面的特性,页面布局上这三部分肯定是不能放在一个线性布局的,不然怎么调整软键盘都是徒劳。我们在相对布局中将VideoView和ViewPager作为内容区,EditText看做一部分,这时候默情况内容区域还是会被顶上去,adjustPan
模式时和默认一样,只有adjustResize模式下,EditText会被顶起且VideoView不会被移动,达到我们要的效果。那么我踩的坑在哪呢,我就是按照这个思路设置完以后死活不行,视频区域一直被滚动上去,在我回头对比了几个直播App之后发现原因就是这个:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);是的,我设置了全屏,导致软键盘设置模式失效!!!
-------关于全屏模式下adjustResize 失效问题 也已经有了解决方案,搜索
AndroidBug5497Workaround
-------------------------------
第一篇博客,之前一直把东西记成笔记,简单方便,不用组织语言,自己看的懂就行,后来发现还是太天真,有些问题时间久了再看自己写的东西都一脸懵逼,到底还是不能偷懒,重要东西还是要做详细记录啊,以后会坚持写一些东西,以前的笔记,新学的知识什么的,希望自己能坚持下来。
没有更多推荐了,博客分类:
Android软键盘弹出,会把原来的界面挤上去的问题
在项目的AndroidManifest.xml文件中界面对应的&activity&里加入android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。。
如果不想键盘覆盖屏幕,想让屏幕整体上移,就加入属性android:windowSoftInputMode="stateVisible|adjustResize"
浏览: 287325 次
来自: 北京
心雨心 写道你说的不好用是?你好,在静默卸载系统级别app的时 ...
请问楼主哪里提供地震的xml文件啊
[/url][url][flash=200,2 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'Android手机软键盘遮盖输入框之重新布局详解
在开发Android应用程序时,经常会有登录界面,无非是输入用户名、密码进行登录。当输入框获取焦点时,会弹出软键盘进行输入,如果输入框和登录按钮布局在整个布局文件的中间或靠下,势必会被软键盘遮挡,让人十分郁闷。网络上的解决方法无非也就那么三种:
第一、将登录框放在布局文件的顶端,软键盘不会遮挡;这种方案虽然能解决问题,但相当不灵活;
第二、在布局文件中根节点处加入ScrollView控件;
第三、这是我今天要讲的内容
首先,继承RelativeLayout,获取当前屏幕高度,实现onMesure、onSizeChanged方法;
其次,为自定义的Layout添加视图偏移的监听器
最后、在Activity当中实现监听
在Activity中实现OnSizeChangedListener,原理是设置该布局的paddingTop属性来控制子View的偏移,如下:
在AndroidManifest.xml中注册该Activity,需要注意的是:必须为该Activity设置android:windowSoftInputMode="adjustResize"属性,当windowSoftInputMode为adjustResiz时,Layout才会调用protected void onSizeChanged(int w, int h, int oldw, int oldh)这个方法。
俗话说,无图无真相,直接上图(借助了QQ2012的登录界面)
各位体会下吧!
没有更多推荐了,

我要回帖

更多关于 软键盘怎么打开 的文章

 

随机推荐