解决底部EditText输入框被键盘遮挡的问题

      发布在:Android      评论:2 条评论

很多时候,由于各种各样的复杂布局嵌套,固定在底部的EditText输入框在输入法弹出后或多或少会出现一些显示不全的问题,例如这样

解决底部EditText输入框被键盘遮挡的问题
这种情况下,我们要监听布局的变化,从而相应地改变输入框的bottomMargin,代码如下:

public class MainActivity extends Activity {
    ***
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ***
        final int navHeight = Utils.getNavigationBarHeight();       //获取非实体Home键手机中底部导航栏的高度
        mSendMsgLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect rect = new Rect();
                getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);      //获取界面的可视高度(不被键盘遮挡的这部分)
                int parentHeight = mSendMsgLayout.getRootView().getHeight();    //屏幕高度(包含了状态栏和虚拟导航栏)
                int coveredHeight = parentHeight - rect.bottom;     //被覆盖的高度(包含了虚拟导航栏)
                if (coveredHeight > 0) {    //当界面发生了形变时才去设置
                    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mSendMsgLayout.getLayoutParams();
                    params.bottomMargin = coveredHeight - navHeight;        //减去虚拟导航栏的高度后才是真正被键盘遮盖的高度
                    mSendMsgLayout.requestLayout();
                }
            }
        });
    }
}

其中,mSendMsgLayout是包含了edittext的白色布局。除此之外,页面所属的Activity需要修改其AndroidManifest.xml中的android:windowSoftInputMode属性为"adjustResize|stateHidden",这样就搞定啦
解决底部EditText输入框被键盘遮挡的问题

Responses
    加载中...
  1. 感谢分享

    回复
    • longli博主

      是不是只能输入中文?不知道改哪里的函数

      回复