zoukankan      html  css  js  c++  java
  • 沉浸式主题下软键盘问题

    版权声明:本文为xing_star原创文章,转载请注明出处!

    本文同步自http://javaexception.com/archives/150

    沉浸式主题下软键盘问题

    项目中,对沉浸式的处理用的是https://github.com/gyf-dev/ImmersionBar 这个开源项目,项目还算可以的,处理了不少疑难杂症。刚好这几天碰到了这个问题,所以这里做个简单的总结。

    我们的登录页面就是个沉浸式的主题,布局中有两个EditText。对于屏幕比较窄的手机,最下面的EditText会被软键盘给遮住,这样体验太差,只能想办法解决了。

    ImmersionBar对软键盘这块有处理,理解它的用法,按照它的api操作,可以解决问题。

    ImmersionBar上几个很常见的问题 https://github.com/gyf-dev/ImmersionBar/issues/288 https://github.com/gyf-dev/ImmersionBar/issues/79 这两个问题中,设置keyboardEnable(true)后,底部的控件会被顶上去,这个应该是由于ImmersionBar做的处理,是它的锅,对于这种,我们可以获取到底部的控件,在软键盘弹起的时候,将bottomLayout设置为View.GONE,收拢的时候,恢复bottomLayout的显示。

    解决方案

    简易的代码为:

    ImmersionBar.with(this).keyboardEnable(true).setOnKeyboardListener((isPopup, keyboardHeight) -> {
    if (isPopup) {
    bottomLayout.setVisibility(View.GONE);
    } else {
    bottomLayout.setVisibility(View.VISIBLE);
    }
    }).statusBarDarkFont(true).titleBar(R.id.tv_status).init();

    keyboardEnable(true) 这个方法设置了当前Activity软键盘弹出的模式,默认是AdjustResize。

    那么单纯这种就可行么,可能不一定可行,这个就需要结合自己的页面布局来看了。

    如果没有使用ScrollView作为跟节点容器,那么当软键盘弹起的时候,为了避免软键盘遮住EditText,可以将EditText等上面的一些控件给隐藏起来,或者是修改在上面的view的padding或者是margin。这样可以解决问题。
    代码可以是这样子的。

    ImmersionBar.with(this).keyboardEnable(true).setOnKeyboardListener((isPopup, keyboardHeight) -> {
    if (isPopup) {
    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) mTvStatus.getLayoutParams();
    layoutParams.topMargin = DisplayUtils.dip2px(20);
    mTvStatus.setLayoutParams(layoutParams);
    bottomLayout.setVisibility(View.GONE);
    } else {
    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) mTvStatus.getLayoutParams();
    layoutParams.topMargin = DisplayUtils.dip2px(50);
    mTvStatus.setLayoutParams(layoutParams);
    bottomLayout.setVisibility(View.VISIBLE);
    }
    }).statusBarDarkFont(true).titleBar(R.id.tv_status).init();

    到此问题解决, 用ImmersionBar的api处理软键盘问题还是很方便的。

  • 相关阅读:
    string_view暴力串串题
    字符串hash暴力串串题
    C++刷leetcode几点注意事项
    微软面试算法题(整理)
    Leetcode中的Dijkstra算法
    gdb在线调试多线程程序
    2022亚马逊校园招聘软件开发实习提前批面试题
    python模块tqdm(进度条)的使用
    解决 Failed while installing Dynamic Web Module
    最新eclipse从零开始建立SpringMVC项目(详细过程)
  • 原文地址:https://www.cnblogs.com/xing-star/p/11101278.html
Copyright © 2011-2022 走看看