下圖是登陸界面

登陸界面
如果不做任何設(shè)置,當(dāng)Edittext獲得焦點(diǎn)彈起鍵盤時(shí),鍵盤將會(huì)掩蓋該Edittext下面的空間。如下圖:

差體驗(yàn)
可以在AndroidMainfest.xml給該Activity加入一個(gè)屬性windowSoftInputMode,就可以讓系統(tǒng)在彈起鍵盤時(shí)自動(dòng)調(diào)整界面。如果沒有stateHidden會(huì)自動(dòng)彈出鍵盤。
<activity android:name=".ui.activity.LoginActivity"
android:windowSoftInputMode="adjustResize|stateHidden" />
效果如下:

一般體驗(yàn)
不過是系統(tǒng)自動(dòng)調(diào)整界面大小,可以看到,背景圖片中的兵哥哥被壓扁了,所以我打算監(jiān)測(cè)到鍵盤彈起時(shí)就把背景設(shè)置為空,反之正常顯示。代碼在MainActivity.class中實(shí)現(xiàn),如下:
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;
//因?yàn)橄到y(tǒng)沒有直接監(jiān)聽軟鍵盤API,所以就用以下方法
mRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() { //當(dāng)界面大小變化時(shí),系統(tǒng)就會(huì)調(diào)用該方法
Rect r = new Rect(); //該對(duì)象代表一個(gè)矩形(rectangle)
mRootView.getWindowVisibleDisplayFrame(r); //將當(dāng)前界面的尺寸傳給Rect矩形
int deltaHeight = screenHeight - r.bottom; //彈起鍵盤時(shí)的變化高度,在該場(chǎng)景下其實(shí)就是鍵盤高度。
if (deltaHeight > 150) { //該值是隨便寫的,認(rèn)為界面高度變化超過150px就視為鍵盤彈起。
mRootView.setBackground(null);
} else {
mRootView.setBackgroundResource(R.drawable.login_background_img);
}
}
});
}
效果如下:

較好體驗(yàn)