知识拓展
android:windowSoftInputMode:设置窗体软键盘的交互模式。
1. stateUnspecified
当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的。可是当有获得焦点的输入框的界面有滚动的需求的时候,会自己主动弹出软键盘。
2. stateUnchanged
就是说,当前界面的软键盘状态,取决于上一个界面的软键盘状态。举个样例,假如当前界面键盘是隐藏的,那么跳转之后的界面,软键盘也是隐藏的;假设当前界面是显示的,那么跳转之后的界面,软键盘也是显示状态。
3. stateHidden
假设我们设置了这个属性,那么键盘状态一定是隐藏的,无论上个界面什么状态。也无论当前界面有没有输入的需求,反正就是不显示。因此,我们能够设置这个属性,来控制软键盘不自己主动的弹出。
4. stateAlwaysHidden
这个属性也能够让软键盘隐藏
5. stateVisible
设置为这个属性,能够将软键盘召唤出来,即使在界面上没有输入框的情况下也能够强制召唤出来。
6. stateAlwaysVisible
这个属性也是能够将键盘召唤出来,可是与stateVisible属性有小小的不同之处。举个样例,当我们设置为stateVisible属性,假设当前的界面键盘是显示的,当我们点击button跳转到下个界面的时候,软键盘会由于输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。可是假设我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,可是当我们再次回来的时候。软键盘是会显示出来的。
7. adjustResize
这个属性表示Activity的主窗体总是会被调整大小,从而保证软键盘显示空间。
8. adjustPan
当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
9. adjustUnspecified
默认设置,通常由系统自行决定是隐藏还是显示
效果图:
作用:声明getGlobalLayoutListener()方法,传入你的手机屏幕与指定的控件。ViewTreeObserver会监听你的屏幕,当软键盘弹出时,屏幕可见高度(r.bottom)变小。计算屏幕高度与r.bottom的差值,即为软键盘的高度(diff)。将指定控件的paddingBottom设为diff,就实现了“自定义输入框位于软键盘上方”。同理,当软键盘消失时,paddingBottom设为0,输入框自动落回底部。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View decorView = getWindow().getDecorView();
View contentView = findViewById(Window.ID_ANDROID_CONTENT);
decorView.getViewTreeObserver().addOnGlobalLayoutListener(getGlobalLayoutListener(decorView, contentView));
}
private ViewTreeObserver.OnGlobalLayoutListener getGlobalLayoutListener(final View decorView, final View contentView) {
return new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//用来获取当前窗口可视区域的大小
decorView.getWindowVisibleDisplayFrame(r);
int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;
//软键盘的高度
int diff = height - r.bottom;
if (diff != 0) {
if (contentView.getPaddingBottom() != diff) {
contentView.setPadding(0, 0, 0, diff);
}
} else {
if (contentView.getPaddingBottom() != 0) {
contentView.setPadding(0, 0, 0, 0);
}
}
}
};
}
}
decorView.getViewTreeObserver().addOnGlobalLayoutListener
4.4机型适配问题