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
- android虚拟按键适配
- Android屏幕适配(底部虚拟按键)
- android屏幕适配----虚拟按键
- Android虚拟按键适配Popupwindow
- android 华为虚拟按键适配
- Android屏幕适配(底部虚拟按键)
- Android适配华为手机虚拟按键显示或隐藏
- Android适配之虚拟按键遮挡布局
- Android虚拟按键的判断与适配
- Android适配之状态栏和虚拟按键遮挡布局
- Android 虚拟按键与沉浸式的适配
- Android适配底部虚拟按键的方法
- Android适配之虚拟按键遮挡布局
- Android 虚拟按键适配动态调整布局
- android虚拟按键
- Android: 发送虚拟按键
- android TP虚拟按键
- android虚拟按键
- 使用popupWindow时,当点击listView,没有效果
- Ubuntu下为Python3.x安装pygame
- Java学习笔记之单例模式
- zynq开发中如何向文件系统里添加自己的程序
- 构造方法
- android虚拟按键适配
- 通过控件子类化实现Edit Control接收Enter按键
- git 自动转换行符的坑爹案例
- MaskFilter
- 初识Zigbee
- Chapter 8 浅析CountDownLatch类
- 原型模式设计克隆人
- 【数据结构】红黑树
- matlab 画图