在Lollipop中的软导航栏覆盖应用程序

时间:2014-10-29 19:39:35

标签: android android-5.0-lollipop

在我的Nexus 5上的Android Lollipop(最近的开发预览,构建LPX13D)中,我正在编写的应用程序似乎隐藏在软导航栏下方(带有Back,Home和App History按钮的栏)。我无法在运行Kit Kat的Nexus 4上复制此内容(导航栏后面没有任何内容)。

我需要做些什么来缩小应用程序的视口,以便可以在屏幕上看到我的所有内容?

编辑:

屏幕截图,根据要求。

Nexus 4运行Kit Kat(4.4.4): enter image description here

Nexus 5运行Lollipop(5.0,LPX13D): enter image description here

5 个答案:

答案 0 :(得分:10)

经过大量测试后,我发现SlidingMenu库存在问题。我无法修复它,也无法找到除了涉及滑动操作栏的选项之外的根本原因。

我在库的GitHub上发布了一个问题,希望能够修复库或解决方案。

https://github.com/jfeinstein10/SlidingMenu/issues/680

编辑(2014-11-04):作为一个快速跟进,用户在上述问题中发布了与Material主题相关的内容,并且使用Holo主题将避免此问题。我能够证实这一点。所以我们可能需要等待修复SlidingMenu才能将它与Material主题一起使用。

答案 1 :(得分:2)

尝试将android:fitsSystemWindows="true"添加到Activity布局文件的根视图中。

答案 2 :(得分:0)

如果有人与android.support.v4有类似问题 - 只需将支持库更新为22.2.1版本。

答案 3 :(得分:0)

经过几个小时的研发后,我们采用了解决方案

如果您使用的是ResideMenu库,则只需在ResideMenu.java

中添加此方法即可解决此问题。
  @Override
protected boolean fitSystemWindows(Rect insets) {
    int bottomPadding = insets.bottom;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Resources resources = getResources();
        int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
        if (resourceId > 0) {
            bottomPadding += resources.getDimensionPixelSize(resourceId);
        }
    }
    this.setPadding(viewActivity.getPaddingLeft() + insets.left, viewActivity.getPaddingTop() + insets.top,
            viewActivity.getPaddingRight() + insets.right, viewActivity.getPaddingBottom() + bottomPadding);
    insets.left = insets.top = insets.right = insets.bottom = 0;
    return true;
}

答案 4 :(得分:0)

现在为我工作的简单解决方案是, 获取导航栏高度并在setContentView之后将填充设置为OnCreate()中活动的根布局。

.....
        int navHeight = getNavHeight();
        if (navHeight > 0) {
            (findViewById(R.id.rlMain)).setPadding(0, 0, 0, navHeight);
        }
.....
    private int getNavHeight() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
            return 0;
        try {

            Resources resources = getResources();
            int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
            if (resourceId > 0) {
                boolean hasMenuKey = ViewConfiguration.get(getApplicationContext()).hasPermanentMenuKey();
                boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);

                if (!hasMenuKey && !hasBackKey) {
                    return resources.getDimensionPixelSize(resourceId);
                }
            }
        } catch (Exception ex) {
            return 0;
        }
        return 0;
    }