麦子学院Android开发教程软键盘弹出解决方案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

IT在线教育平台——麦子学院很多开发者在写登陆界面的时候都会遇到同样的问题,在登陆界面时,当你点击输入框里,下边的按钮有时会被输入框挡住,这个很影响用户体验,很多人都设想软键盘弹出时,能把按钮挤上去,达到监听键盘的状态,下面我们就来看看解决办法。我们可以在AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode=adjustResize,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点当我们设置为“adjustResize”时,我们的界面不要设置为全屏模式,否则设置了这个属性也不会有什么效果。而当我们设置android:windowSoftInputMode=adjustPan时,主窗口就不会调用onSizeChanged方法,界面的一部分就会被软键盘覆盖住,就不会被挤到软键盘之上了。我们通过一段代码来测试一下,当我们设置了该属性后,弹出输入法时,系统做了什么:重写Layout布局:1.[java]viewplaincopyprint?1.publicclassResizeLayoutextendsLinearLayout{2.privatestaticintcount=0;3.4.publicResizeLayout(Contextcontext,AttributeSetattrs){5.super(context,attrs);6.}7.8.@Override9.protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){10.super.onSizeChanged(w,h,oldw,oldh);11.12.Log.e(onSizeChanged+count++,=onResizecalled!w=+w+,h=+h+,oldw=+oldw+,oldh=+oldh);13.}14.15.@Override16.protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){17.super.onLayout(changed,l,t,r,b);18.Log.e(onLayout+count++,=OnLayoutcalled!l=+l+,t=+t+,r=+r+,b=+b);19.}IT在线教育平台——麦子学院@Override22.protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){23.super.onMeasure(widthMeasureSpec,heightMeasureSpec);24.25.Log.e(onMeasure+count++,=onMeasurecalled!widthMeasureSpec=+widthMeasureSpec+,heightMeasureSpec=+heightMeasureSpec);26.}2.我们的布局设置为:1.[html]viewplaincopyprint?1.com.winuxxan.inputMethodTest.ResizeLayout2.xmlns:android=:id=@+id/root_layout4.android:layout_width=fill_parent5.android:layout_height=fill_parent6.android:orientation=vertical7.8.9.EditText10.android:layout_width=fill_parent11.android:layout_height=wrap_content12./13.14.LinearLayout15.android:id=@+id/bottom_layout16.android:layout_width=fill_parent17.android:layout_height=fill_parent18.android:orientation=vertical19.android:gravity=bottoms20.21.TextView22.android:layout_width=fill_parent23.android:layout_height=wrap_content24.android:text=@string/hello25.android:background=#7777777726./IT在线教育平台——麦子学院的Activity设置属性:android:windowSoftInputMode=adjustResize运行程序,点击文本框,查看调试信息:E/onMeasure6(7960):=onMeasurecalled!widthMeasureSpec=1073742144,heightMeasureSpec=1073742024E/onMeasure7(7960):=onMeasurecalled!widthMeasureSpec=1073742144,heightMeasureSpec=1073742025E/onSizeChanged8(7960):=onSizeChangedcalled!w=320,h=201,oldw=320,oldh=377E/onLayout9(7960):=OnLayoutcalled!l=0,t=0,r=320,b=201从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。windowSoftInputMode的值如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。上面的例子中,我们将AndroidManifest.xml的属性进行更改:android:windowSoftInputMode=adjustPan重新运行,并点击文本框,查看调试信息:E/onMeasure6(8378):=onMeasurecalled!widthMeasureSpec=1073742144,heightMeasureSpec=1073742200IT在线教育平台——麦子学院(8378):=onMeasurecalled!widthMeasureSpec=1073742144,heightMeasureSpec=1073742201E/onLayout8(8378):=OnLayoutcalled!l=0,t=0,r=320,b=377我们看到:系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用,这说明输入法弹出前后并没有改变原有布局的大小。如需了解更多相关知识,请至麦子学院官网查询。

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功