这几天做项目的时候发现了一个问题,就是在做登录界面的时候,在点击密码输入框输入密码的时候,总是会出现这种情况:
首先是最开始的界面:
然后我点击密码输入框的时候,软键盘弹出的界面是这样的额,遮挡住了部分输入框:
这显然不是我们想要的效果,我想要的是将密码输入框以上的控件都上移,不被覆盖,需求知道了,现在就是怎么解决了,首先不管是问的群里的一些人,他们说在Mainfest清单文件里面的Activity设置:
<activity android:name=".user.LoginActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode=
"stateVisible|adjustResize"
屏幕整体上移
/>
我添加进去了,但是却没什么效果,不符合要求,后来有查到说是全屏的这样设置是不不能成功的,好吧,又开始百度其他的方法,
有说这样可以:
网址:http://blog.csdn.net/xiechengfa/article/details/51122823
具体内容是这样的:
全屏模式下,即使将activity的windowSoftInputMode的属性设置为:adjustResize,在键盘显示时它未将Activity的Screen向上推动,所以你Activity的view的根树的尺寸是没有变化的。在这种情况下,你也就无法得知键盘的尺寸,对根view的作相应的推移。全屏下的键盘无法Resize的问题从2.1就已经存在了,直到现在google还未给予解决。
感谢Ricardo提供的轮子,他在stackoverflow找到了解决方案。有人已经封装好了该类,你只需引用就OK了。
使用方法
在你的Activity的oncreate()方法里调用AndroidBug5497Workaround.assistActivity(this);即可。注意:在setContentView(R.layout.xxx)之后调用。
-
-
-
-
- import android.app.Activity;
- import android.graphics.Rect;
- import android.view.View;
- import android.view.ViewTreeObserver;
- import android.widget.FrameLayout;
-
-
- public class AndroidBug5497Workaround {
-
-
-
-
- public static void assistActivity (Activity activity) {
- new AndroidBug5497Workaround(activity);
- }
-
- private View mChildOfContent;
- private int usableHeightPrevious;
- private FrameLayout.LayoutParams frameLayoutParams;
-
- private AndroidBug5497Workaround(Activity activity) {
- FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
- mChildOfContent = content.getChildAt(0);
- mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- public void onGlobalLayout() {
- possiblyResizeChildOfContent();
- }
- });
- frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
- }
-
- private void possiblyResizeChildOfContent() {
- int usableHeightNow = computeUsableHeight();
- if (usableHeightNow != usableHeightPrevious) {
- int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
- int heightDifference = usableHeightSansKeyboard - usableHeightNow;
- if (heightDifference > (usableHeightSansKeyboard/4)) {
-
- frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
- } else {
-
- frameLayoutParams.height = usableHeightSansKeyboard;
- }
- mChildOfContent.requestLayout();
- usableHeightPrevious = usableHeightNow;
- }
- }
-
- private int computeUsableHeight() {
- Rect r = new Rect();
- mChildOfContent.getWindowVisibleDisplayFrame(r);
- if(r.top==0){
- r.top=statusBarH;
- }
- return (r.bottom - r.top);
- }
-
- }
OK,找到方法了,就开始测试了,我添加进去之后,but,依然不能成功,真不知道怎么办好了,快2天了!,然后继续百度,终于看到有说的这么一个方法:
网址:
http://blog.csdn.net/wk843620202/article/details/51580113
基本内容是这样的:
安卓界面虚拟键盘弹出下面布局怎么顶上去,解决方法如下:
1,在布局文件中,设置ScrollView :
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"