android:windowSoftInputMode属性共有9个值。每个是:
stateUnspecified:
当属性设置为stateUnspecified时,默认情况下系统不会弹出软键盘。但是,当需要滚动具有焦点的输入框的界面时,软键盘将自动弹出。至于为什么要强调输入框来获得焦点。这是因为假定输入框没有获得焦点。软键盘不会自动弹出。防止接口自动弹出软键盘的解决方案之一是xml文件。设置非输入框控件以获取焦点,从而防止键盘弹出。
stateUnchanged:
当前接口的软键盘状态取决于先前接口的软键盘状态。例如,如果当前接口的键盘是隐藏的,则跳转之后的接口的软键盘也将隐藏。如果显示当前界面,则还会显示跳转后的界面软键盘。
stateHidden:
如果设置了此属性,则无论先前接口的状态如何,都必须隐藏键盘状态。无论当前界面是否有输入要求,它都不会显示。因此,我们可以设置此属性来控制软键盘自动弹出。
stateAlwaysHidden:
stateAlwaysHidden无论如何都是隐藏的,但假设是在跳转到下一个界面时。软键盘被调出。因此,当用户返回下一个界面时,不应隐藏键盘。但是,我还没有找到一种在不消失当前界面软键盘的情况下跳至下一个界面的方法。因此暂时无法验证
stateVisible:

设置为该属性,可以召唤软键盘,即使界面上没有输入框,也可以强行召唤。
stateAlwaysVisible:
当我们设置stateVisible属性时,假设显示了当前界面键盘,则当我们单击按钮跳转到下一个界面时,由于输入框失去焦点,软键盘将被隐藏。当我们返回到当前界面时,此时键盘处于隐藏状态。但是假设我们将其设置为stateAlwaysVisible,我们跳到下一个界面,软键盘仍处于隐藏状态,但是当我们再次返回时。将显示软键盘
adjustUnspecified:
此选项也是默认设置模式。在这种情况下,系统将根据界面选择不同的模式。假设界面中有可滚动控件,例如ScrowView。系统将减小可滚动界面的大小,以确保即使显示了软键盘,也可以看到所有内容。假设布局中没有滚动控件。然后软键盘可能会覆盖一些内容,我们可以看到与下图的区别。
adjustResize:
此属性指示“活动”的主要形式将始终被调整大小,以确保软键盘的显示空间。对于没有滑动控件的布局,布局的位置不会改变。软键盘将覆盖输入框。如果活动表单上有一个滑动控件,则该滑动控件将被压缩。例如,键盘不会覆盖输入法。
adjustPan:
设置此属性,将不调整“活动”的窗口大小以确保软键盘的空间,但整个布局将直接向上。它不会压缩滑动控件。
普通模式:

1.登录界面的底部有一个用户名,一个密码和一个登录按钮。弹出软键盘时,将显示“登录”按钮
a。布局文件:
//android:windowSoftInputMode: 不可用adjustReSize
b:活动中的处理:
@Override
public void onCreate() {
setContentView(R.layout.activity_login);
et_login_phone=findViewById(R.id.et_login_phone);
et_login_password=findViewById(R.id.et_login_password);
//SoftHideKeyBoardUtil.assistActivity(this);
//核心处理
addLayoutListener(findViewById(R.id.main),findViewById(R.id.rl_login));
} /**
* 保持登录按钮始终不会被覆盖
*
* @param root
* @param subView
*/
public void addLayoutListener(final View root, final View subView) {
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
// 获取root在窗体的可视区域
root.getWindowVisibleDisplayFrame(rect);
// 获取root在窗体的不可视区域高度(被其他View遮挡的区域高度)
int rootInvisibleHeight = root.getRootView().getHeight() - rect.bottom;
// 若不可视区域高度大于200,则键盘显示,其实相当于键盘的高度
if (rootInvisibleHeight > 200) {
// 显示键盘时
int srollHeight = rootInvisibleHeight - (root.getBottom() - subView.getBottom()) - getNavigationBarHeight(root.getContext());
if (srollHeight > 0) {//当键盘高度覆盖按钮时
subView.scrollTo(0, srollHeight);
}
} else {
// 隐藏键盘时
subView.scrollTo(0, 0);
}
}
});
}
/**
* 判断是否有虚拟底部按钮
*
* @return
*/
public static boolean checkDeviceHasNavigationBar(Context context) {
boolean hasNavigationBar = false;
Resources rs = context.getResources();
int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
if (id > 0) {
hasNavigationBar = rs.getBoolean(id);
}
try {
Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
Method m = systemPropertiesClass.getMethod("get", String.class);
String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
hasNavigationBar = false;
} else if ("0".equals(navBarOverride)) {
hasNavigationBar = true;
}
} catch (Exception e) {
Log.w(TAG, e);
}
return hasNavigationBar;
}
/**
* 获取底部虚拟按键高度
*
* @return
*/
public static int getNavigationBarHeight(Context context) {
int navigationBarHeight = 0;
Resources rs = context.getResources();
int id = rs.getIdentifier("navigation_bar_height", "dimen", "android");
if (id > 0 && checkDeviceHasNavigationBar(context)) {
navigationBarHeight = rs.getDimensionPixelSize(id);
}
return navigationBarHeight;
}

AdjustResize失败:活动已将全屏属性设置为引用Theme.Light.NotittleBar.Fullscreen(在弹出键盘时标题栏也将被上推)或在主题中设置了android:windowTranslucentStatus属性对应于活动。设置方法为:android:windowTranslucentStatus = true,如果相应页面包含输入框,则在单击输入框时会弹出软键盘,并且键盘将覆盖输入框,从而使输入框不可见。

fitsSystemWindows =“ true”,仅初始视图有效:如果在不是最外面的控件的布局中设置了fitsSystemWindows =“ true”,则set控件的高度将是状态栏的高度。如果设置了多个视图,则由于第一个视图已经消耗了昆虫,因此系统也会忽略其他设置的视图。
///单击“完成”按钮以自动缩回键盘:
android:id =“ @ + id / ssid”
android:layout_width =“ 561dp”
android:layout_height =“ wrap_content”
android:text =“ @ string / wifi_ssid”
android:textSize =“ 24.0sp”
android:singleLine =“ true”
android:imeOptions =“ actionDone”
/>
参考设计:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-355333-1.html
有几个公司账目不造假