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内的布局移动到某一个固定位置。
如果其他人还有更好的办法,希望分享一下。谢谢。