android虚拟按键适配

来源:互联网 发布:g76内螺纹编程实例 编辑:程序博客网 时间:2024/05/16 23:36

android虚拟按键适配问题,1是虚拟按键高度的问题,2就是布局遮挡的问题。这里分别说下:

一.虚拟按键的高度如何计算

这种方法有问题,有适配问题,在有的华为手机上不行。尽量避免用这种方式,考虑替换方案。

http://www.devdroid.cn/2015/12/06/%E8%8E%B7%E5%8F%96android%E6%89%8B%E6%9C%BA%E5%BA%95%E9%83%A8%E5%AF%BC%E8%88%AA%E6%A0%8F%E7%9A%84%E9%AB%98%E5%BA%A6/

http://blog.csdn.net/linglongxin24/article/details/52993128

/**获取虚拟功能键高度 */ public int getVirtualBarHeigh() {        int vh = 0;        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        Display display = windowManager.getDefaultDisplay();        DisplayMetrics dm = new DisplayMetrics();        try {            @SuppressWarnings("rawtypes")            Class c = Class.forName("android.view.Display");            @SuppressWarnings("unchecked")            Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);            method.invoke(display, dm);            vh = dm.heightPixels - windowManager.getDefaultDisplay().getHeight();        } catch (Exception e) {            e.printStackTrace();        }        return vh;    }
// 解决,键盘弹出,布局错乱的问题        ViewTreeObserver observer = mRlRoot.getViewTreeObserver();        observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                Rect r = new Rect();                //获取当前界面可视部分                getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(r);                //获取屏幕的高度                int screenHeight =  getActivity().getWindow().getDecorView().getRootView().getHeight();                //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数                int heightDifference = screenHeight - r.bottom;                if (heightDifference > 0) {                    // 如果高度差超过100像素,就很有可能是有软键盘...                    mLlBottom.setVisibility(View.INVISIBLE);                } else {                    mLlBottom.setVisibility(View.VISIBLE);                }            }        });

如上这种判断软键盘是弹出还是隐藏的方法是有问题的。因为如果有虚拟按键,同样会出现heightDifference>0的情况。用如下这个方法就对了:

// 解决,键盘弹出,布局错乱的问题        ViewTreeObserver observer = mRlRoot.getViewTreeObserver();        observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                Rect r = new Rect();                //获取当前界面可视部分                getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(r);                //获取屏幕的高度                WindowManager windowManager = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);                int screenHeight =  windowManager.getDefaultDisplay().getHeight();                //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数                int heightDifference = screenHeight - r.bottom;                if (heightDifference > 0) {                    // 如果高度差超过100像素,就很有可能是有软键盘...                    mLlBottom.setVisibility(View.INVISIBLE);                } else {                    mLlBottom.setVisibility(View.VISIBLE);                }            }

二.布局遮挡的问题

https://www.zhihu.com/question/35292413

0 0
原创粉丝点击