下图是登陆界面
如果不做任何设置,当Edittext获得焦点弹起键盘时,键盘将会掩盖该Edittext下面的空间。如下图:
可以在AndroidMainfest.xml
给该Activity
加入一个属性windowSoftInputMode
,就可以让系统在弹起键盘时自动调整界面。如果没有stateHidden
会自动弹出键盘。
<activity android:name=".ui.activity.LoginActivity"
android:windowSoftInputMode="adjustResize|stateHidden" />
效果如下:
不过是系统自动调整界面大小,可以看到,背景图片中的兵哥哥被压扁了,所以我打算监测到键盘弹起时就把背景设置为空,反之正常显示。代码在MainActivity.class
中实现,如下:
private RelativeLayout mRootView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//这是我的根布局
mRootView = (RelativeLayout) findViewById(R.id.rl_root);
//获取屏幕高度
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
final int screenHeight = metrics.heightPixels;
//因为系统没有直接监听软键盘API,所以就用以下方法
mRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() { //当界面大小变化时,系统就会调用该方法
Rect r = new Rect(); //该对象代表一个矩形(rectangle)
mRootView.getWindowVisibleDisplayFrame(r); //将当前界面的尺寸传给Rect矩形
int deltaHeight = screenHeight - r.bottom; //弹起键盘时的变化高度,在该场景下其实就是键盘高度。
if (deltaHeight > 150) { //该值是随便写的,认为界面高度变化超过150px就视为键盘弹起。
mRootView.setBackground(null);
} else {
mRootView.setBackgroundResource(R.drawable.login_background_img);
}
}
});
}
效果如下: