在开发app的时候会遇到有些测试手机没有物理按钮,比如最近在做的一个app在小米手机上运行显示效果很好,但是在华为P7手机上显示就乱了,底部的NavigationBar直接覆盖在主视图上,导致按钮无法触发。

正常效果.jpg

异常效果.jpg

解决的方法就是先判断手机是否有物理按钮,然后计算底部的NavigationBar高度,最后设置试图边距。

public int getNavigationBarHeight() {

        boolean hasMenuKey = ViewConfiguration.get(this).hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
if (!hasMenuKey && !hasBackKey) {
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
//获取NavigationBar的高度
int height = resources.getDimensionPixelSize(resourceId);
return height;
}
else{
return 0;
}
}
 getWindow().getDecorView().findViewById(android.R.id.content).setPadding(0, 0, 0, getNavigationBarHeight());

如果设置android.R.id.content的边距,底部是白色背景或者黑色(这个和你用的theme有关,黑色还能接受,白色显得app很不搭)

<item name="android:windowBackground">@android:color/white</item>

low.jpg

如果想换其他的颜色,又不想修改windowBackground。那么可以在布局文件中的父试图设置你想要的颜色,然后再显示的时候设置该控件的padding属性。

最新文章

  1. Xcode出现( linker command failed with exit code 1)错误总结
  2. mybatis 中${}和#{}区别
  3. smartUpload组件文件上传
  4. 禁止触屏滑动touchmove方法介绍
  5. 关于XML(一)。
  6. 第一百二十六节,JavaScript,XPath操作xml节点
  7. Python把给定的列表转化成二叉树
  8. PHP开发工程师应该具备那些技术能力
  9. RAC 10g administration
  10. Table对象代表一个HTML表格,在文档中&lt;table&gt;标签每出现一次,一个table对象就会被创建。
  11. 利用NSE脚本检测域传送和证书透明度滥用
  12. Selenium Webdriver 中的 executeScript 使用方法
  13. spring mvc后端校验validator
  14. js方法用来获取路径传参上所带的参数
  15. January 16th, 2018 Week 03rd Tuesday
  16. Navicat连接mysql8.0.1版本出现1251--Client does not support authentication protocol requested by server的解决
  17. Go语言学习笔记(二)十分钟上手
  18. UI Recorder 功能详解
  19. UIImage添加滤镜
  20. POJ2502乘坐地铁上学

热门文章

  1. 深度递归必须知道的尾调用(Lambda)
  2. Git暂存本地代码,强制获取远程最新代码
  3. Redis哨兵(Sentinel)模式快速入门
  4. 《Ansible自动化运维:技术与佳实践》第二章读书笔记
  5. Object和Objects
  6. windows2008r2安装笔记
  7. HTTPS加密协议
  8. OpenGl读取导入3D模型并且添加鼠标移动旋转显示
  9. Mahout介绍、安装与应用案例
  10. ubuntu httpie使用方法