android:windowSoftInputMode属性一共同拥有9个取值。各自是:

stateUnspecified:

当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的。可是当有获得焦点的输入框的界面有滚动的需求的时候,会自己主动弹出软键盘。至于为什么非要强调要获取焦点的输入框。这是由于,假设不是输入框获取焦点。软键盘也是不会自己主动弹出的。让界面不自己主动弹出软键盘的当中一个解决方式,就是在xml文件里。设置一个非输入框控件获取焦点,从而阻止键盘弹出。

stateUnchanged:

当前界面的软键盘状态,取决于上一个界面的软键盘状态。举个样例,假如当前界面键盘是隐藏的,那么跳转之后的界面,软键盘也是隐藏的;假设当前界面是显示的,那么跳转之后的界面,软键盘也是显示状态。

stateHidden:

设置了这个属性,那么键盘状态一定是隐藏的,无论上个界面什么状态。也无论当前界面有没有输入的需求,反正就是不显示。因此,我们能够设置这个属性,来控制软键盘不自己主动的弹出。

stateAlwaysHidden:

stateAlwaysHidden不管怎样都是隐藏的,可是假设在跳转到下个界面的时候。软键盘被召唤出来了。那么当下个界面被用户返回的时候,键盘应该是不会被隐藏的,可是,我还没有找到可以跳转到下个界面,还让当前界面软键盘不消失的方法。所以临时不能验证

stateVisible:

设置为这个属性,能够将软键盘召唤出来,即使在界面上没有输入框的情况下也能够强制召唤出来。

stateAlwaysVisible:

当我们设置为stateVisible属性,假设当前的界面键盘是显示的,当我们点击button跳转到下个界面的时候,软键盘会由于输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。可是假设我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,可是当我们再次回来的时候。软键盘是会显示出来的

adjustUnspecified:

这个选项也是默认的设置模式。在这中情况下,系统会依据界面选择不同的模式。假设界面里面有能够滚动的控件,比方ScrowView。系统会减小能够滚动的界面的大小,从而保证即使软键盘显示出来了,也能够看到全部的内容。假设布局里面没有滚动的控件。那么软键盘可能就会盖住一些内容,我们从以下的图中能够看出区别。

adjustResize:

这个属性表示Activity的主窗体总是会被调整大小,从而保证软键盘显示空间.对于没有滑动控件的布局,布局的位置并不会发生变化.软键盘会遮住输入框. 如果Activity 的窗体有滑动控件, 就会压缩该可滑动的控件. 如键盘不会遮住输入法.

adjustPan:

设置这个属性,Activity的窗口大小并不会调整来保证软键盘的空间, 而是直接将整个布局往上顶.不会压缩可滑动控件.

常用模式:

1.登陆界面有用户名, 密码,底部有登陆按钮, 要求弹出软键盘时显示"登陆"按钮

a. 布局文件:

<activity android:name=".ui.activity.login.LoginActivity"/> //android:windowSoftInputMode: 不可用adjustReSize
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:id="@+id/main"android:layout_height="match_parent"android:background="@color/white"android:gravity="center_horizontal"android:orientation="vertical"tools:context=".ui.activity.LoginActivity"><com.hjq.bar.TitleBarandroid:id="@+id/tb_login_bar"android:layout_width="match_parent"android:layout_height="@dimen/space_100"app:bar_style="transparent"app:color_right="@color/colorAccent"app:icon_back="false"app:title=""app:title_right="@string/login_register" /><LinearLayoutandroid:id="@+id/rl_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:background="#CCC"><ImageViewandroid:layout_width="@dimen/space_200"android:layout_height="@dimen/space_200"android:layout_margin="@dimen/space_60"android:src="@mipmap/ic_logo" /><EditTextandroid:id="@+id/et_login_phone"style="@style/EditTextStyle"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/space_80"android:layout_marginTop="@dimen/space_20"android:layout_marginRight="@dimen/space_80"android:hint="@string/login_phone_input_hint"android:inputType="phone"android:maxLength="11"android:maxLines="1" /><Viewstyle="@style/HorizontalLineStyle"android:layout_marginLeft="@dimen/space_80"android:layout_marginRight="@dimen/space_80" /><EditTextandroid:id="@+id/et_login_password"style="@style/EditTextStyle"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/space_80"android:layout_marginTop="@dimen/space_40"android:layout_marginRight="@dimen/space_80"android:hint="@string/login_password_input_hint"android:inputType="textPassword"android:maxLength="20"android:maxLines="1" /><Viewstyle="@style/HorizontalLineStyle"android:layout_marginLeft="@dimen/space_80"android:layout_marginRight="@dimen/space_80" /><TextViewandroid:id="@+id/tv_login_forget"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:layout_marginLeft="@dimen/space_80"android:layout_marginTop="@dimen/space_30"android:layout_marginRight="@dimen/space_120"android:text="@string/login_forget"android:textColor="@color/colorAccent" /><Buttonandroid:id="@+id/btn_login_commit"style="@style/ButtonStyle"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/space_80"android:layout_marginTop="@dimen/space_60"android:layout_marginRight="@dimen/space_80"android:text="@string/login_text" /></LinearLayout></LinearLayout>

b: Activity 中处理:

@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() {@Overridepublic 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失效情况:activity设置了全屏属性指Theme.Light.NotittleBar.Fullscreen(键盘弹起时会将标题栏也推上去)或者设置了activity对应的主题中android:windowTranslucentStatus属性,设置方式为:android:windowTranslucentStatus=true,这时如果对应的页面上含有输入框,将会导致点击输入框时软键盘弹出后键盘覆盖输入框,导致输入框看不见。

fitsSystemWindows=”true”,只有初始的view起作用:如果在布局中不是最外层控件设置fitsSystemWindows=”true”, 那么设置的那个控件高度会多出一个状态栏高度。若有多个view设置了,因第一个view已经消耗掉insect,其他view设置了也会被系统忽略。

//点击done 按钮自动收回键盘:

<EditText
                                        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" 

                                         />

参考设计:

https://blog.csdn.net/smileiam/article/details/69055963

解决登陆界面软键盘弹出遮住登陆按钮相关推荐

  1. android弹出键盘高度,Android 解决全面屏 软键盘弹出会有高度约50dp的白条。

    效果对比图片先走 解决前效果图 T_X0~JU{WQ2FC1W$M})J%1S.jpg 解决完成后效果图 0EBFD68FC050B16866B81321E0FD9C62.jpg /** * @aut ...

  2. uniapp 解决ios软键盘弹出input框被遮住或光标不在input框内

    因为苹果和安卓底层的开发框架不一样 所以软键盘弹出时 苹果系统会出现这些问题 uniapp官方也没有给出明确的解决方案 这个写法是自己谷歌 社区查找并加以实验 得出的解决方案 <view cla ...

  3. 如何解决软键盘弹出引起的各种不适

    1.如何解决软键盘弹出引起的各种不适 2.android软键盘弹出引起的各种不适终极解决方案 3.android软键盘弹出引起的各种不适终极解决方案 4.android软键盘弹出,会把原来的界面挤上去 ...

  4. (转)Android软键盘弹出,界面整体上移

    原地址:http://blog.csdn.net/u011622479/article/details/51161717 在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出:现在问题出来了,an ...

  5. Android 软键盘弹出时把布局顶上去,控件乱套解决方法

    Android 软键盘弹出时把布局顶上去,控件乱套解决方法 参考文章: (1)Android 软键盘弹出时把布局顶上去,控件乱套解决方法 (2)https://www.cnblogs.com/zhuj ...

  6. 软键盘弹出时popwindow_【示例】解决软键盘弹出时底部元素上浮的问题

    问题描述 在html5plus环境下,当html中存在固定在底部的元素时,此时弹出软键盘的话,底部的元素也会被弹上来. 出现这种情况时,看起来页面布局好像乱掉了,这样给用户的体验不太理想. 问题分析 ...

  7. Android 软键盘弹出时把原来布局顶上去的解决方法

    Android 软键盘弹出时把原来布局顶上去的解决方法 参考文章: (1)Android 软键盘弹出时把原来布局顶上去的解决方法 (2)https://www.cnblogs.com/Joanna-Y ...

  8. 解决Android软键盘弹出覆盖h5页面输入框问题 // 在ios系统中输入框软键盘消失后,页面不回弹的问题 // 解决苹果不回弹页面 // 微信环境打开

    //解决Android软键盘弹出覆盖h5页面输入框问题 window.addEventListener('resize', () => {if (document.activeElement.t ...

  9. ios输入框的坑(软键盘弹出不灵敏、输入法影响弹出高度)

    参考地址: https://segmentfault.com/a/1190000018959389 https://blog.csdn.net/github_37533433/article/deta ...

最新文章

  1. 手撕面试题:多个线程交替打印问题
  2. 微软软件测试的可借鉴之处
  3. PCB工艺的一些小原则
  4. Quartus II13.1安装教程
  5. beanpostprocessor与@autowired的关系
  6. 如何启用 express debug 模式
  7. Angular单元测试里使用fixture.debugElement测试UI界面元素
  8. 【Markdown】新手快速入门基础教程
  9. mysql 替换 汉字_MySQL替换文字
  10. 怎么把pdf的背景去掉_PDF试卷有页眉还有水印,打印出来一片花,怎么办?
  11. 惠普瘦客户机多屏显示T5740
  12. 算法之图解单纯形算法C++
  13. splitcontainer控件删除方法
  14. 新手入门:如何用Laya开发微信小游戏?
  15. 电子病历质控系列-医疗质量工作任务003
  16. AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第19章:MANIPULATING IMAGES
  17. flink sql 如何upsert 到一张hologres表中
  18. m4s转为mp4实例:使用ffmpeg和批处理将m4s转为mp4
  19. 官宣!麻省理工学院官方线上课程之机器学习开启啦
  20. jmeter可以做接口测试和压力测试(较全)

热门文章

  1. 诺基亚英雄迟暮:抗拒Android或难挽颓势
  2. CCF认证考试 202012-5星际旅行 (100分)(线段树)
  3. 扩散模型与生成模型详解
  4. PWM脉宽调制信号转直流电压电流模拟信号输出隔离变送器5v10v4-20ma
  5. WordPress建站 新手入门
  6. 95后的私密社交,在陌陌和探探上寻找“纯粹”
  7. Oracle 状告 Google 侵犯专利
  8. 日常记录:java JMX获取MBean从而获取目标应用的pid
  9. element-ui:el-autocomplete实现搜索结果多次点击不关闭弹框
  10. vb/vb.net原创文章精粹(4)