android 6.0导航栏 NavigationBar影响视图解决办法

在开发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属性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,229评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,268评论 25 708
  • 漫长而又寂寥的人生路,有时晴朗有时多雨,有时顺风有时逆流,然而无论如何,不要害怕,不能停步,远方充满了未知的挑战与...
    东隅斋阅读 694评论 0 0
  • 做事,需要有个目标。在目标指引下制定计划,围绕计划实施,这样比较容易达到目的。 但是更高级一点的是,没有明确目标,...
    程序员imHou阅读 491评论 0 0
  • 自八月份踏上北美的土地,距离今日已经五个月了。早上刷朋友圈,发现大家在国内庆祝圣诞节,去年和好友们一起快乐过节日子...
    征服之阅读 271评论 0 1