android 登陆界面软键盘自动弹出问题,以及软键盘弹出之后按钮被遮挡解决

时间:2021-02-01 00:36:17

1、解决软键盘自动弹出的问题:

在Manifest中相应的登录Activity设置属性:android:windowSoftInputMode="adjustResize|stateHidden"

2、软键盘弹出之后让其整体布局上移,使登录按钮在软键盘之上可见:

 转载:http://blog.csdn.net/itachi85/article/details/6596284

(1)、设置属性:android:windowSoftInputMode="adjustResize|stateHidden"

(2)、重写LinearLayout:

 

 1     public class ResizeLayout extends LinearLayout{ 
 2         private static int count = 0; 
 3          
 4         public ResizeLayout(Context context, AttributeSet attrs) { 
 5             super(context, attrs); 
 6         } 
 7          
 8         @Override 
 9         protected void onSizeChanged(int w, int h, int oldw, int oldh) {     
10             super.onSizeChanged(w, h, oldw, oldh); 
11              
12             Log.e("onSizeChanged " + count++, "=>onResize called! w="+w + ",h="+h+",oldw="+oldw+",oldh="+oldh); 
13         } 
14          
15         @Override 
16         protected void onLayout(boolean changed, int l, int t, int r, int b) { 
17             super.onLayout(changed, l, t, r, b); 
18             Log.e("onLayout " + count++, "=>OnLayout called! l=" + l + ", t=" + t + ",r=" + r + ",b="+b); 
19         } 
20          
21         @Override 
22         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
23             super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
24              
25             Log.e("onMeasure " + count++, "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec); 
26         } 

(3)、在登录界面布局xml中使用此LinearLayout

Login_activity.xml

 1     <com.winuxxan.inputMethodTest.ResizeLayout  
 2         xmlns:android="http://schemas.android.com/apk/res/android" 
 3         android:id="@+id/root_layout" 
 4         android:layout_width="fill_parent" 
 5         android:layout_height="fill_parent" 
 6         android:orientation="vertical" 
 7         > 
 8          
 9         <EditText 
10             android:layout_width="fill_parent"  
11             android:layout_height="wrap_content"  
12         /> 
13        
14         <LinearLayout 
15                 android:id="@+id/bottom_layout" 
16                 android:layout_width="fill_parent"  
17                 android:layout_height="fill_parent"  
18                 android:orientation="vertical" 
19                 android:gravity="bottom">s 
20         
21         <TextView   
22             android:layout_width="fill_parent"  
23             android:layout_height="wrap_content"  
24             android:text="@string/hello" 
25             android:background="#77777777" 
26           /> 
27        </LinearLayout> 
28     </com.winuxxan.inputMethodTest.ResizeLayout> 


这个观察Log打印情况,可以测试出在软键盘弹出和隐藏的时候会执行onSizeChanged()方法。

我在登录界面布局Login_activity.xml,在相应的位置加上一个<ScrollView>。在 ResizeLayout 的方法 onSizeChanged()中加上代码:

if (h < 500) {
         scrollView = (ScrollView) this.findViewById(R.id.scrol);
         handler.post(mScrollView);
  }

其中h是此方法自带的参数,意思是当软键盘弹出或者消失的时候界面变化之后的高度。

我的界面在软键盘弹出之后界面的高度是473,消失之后是722,所以我用 h < 500,表示只有软键盘弹出的时候调用下面的方法。

scrollView在上方声明一下,handler在上方声明并且实例化一下。

关于mScrollView:

private Runnable mScrollView = new Runnable() {  
       
        @Override 
        public void run() {
            //改变滚动条的位置
            scrollView.scrollTo(0, 200);
        }
    };

整体来说,就是当软键盘弹出的时候,在onSizeChanged()中使ScrollView内的布局移动到某一个固定位置。

如果其他人还有更好的办法,希望分享一下。谢谢。