应用程序内容落后于android L中的导航栏

nit*_*oel 26 performance android android-layout android-fragments android-5.0-lollipop

在此输入图像描述

你可以看到我的"Got It"按钮位于导航栏后面.无法修复它!我试过了

<item name="android:fitsSystemWindows">true</item>  
Run Code Online (Sandbox Code Playgroud)

以及在布局文件中设置它.

我在21世纪的主题是:

 <style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowFullscreen">false</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:fitsSystemWindows">true</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

与整个应用程序中的所有屏幕相同的情况.

请帮忙.

nit*_*oel 34

这是解决方案.

通过在value-21 style.xml中添加这些属性,可以解决大多数布局问题

<item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:fitsSystemWindows">true</item>
Run Code Online (Sandbox Code Playgroud)

对于其他人,我计算了导航栏的高度并为我的视图添加了边距.

public static int getSoftButtonsBarSizePort(Activity activity) {
    // getRealMetrics is only available with API 17 and +
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        DisplayMetrics metrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int usableHeight = metrics.heightPixels;
        activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
        int realHeight = metrics.heightPixels;
        if (realHeight > usableHeight)
            return realHeight - usableHeight;
        else
            return 0;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

注意: 通过使用上述解决方案一切正常,但我也在我的应用程序中使用PopupWindow.PopupWindow的布局搞砸了android L.在这里寻找问题和解决方案

  • 我将以下内容添加到我的样式<item name ="android:windowTranslucentNavigation"> true </ item> <item name ="android:fitsSystemWindows"> true </ item>它有效!导航栏后面没有任何内容.除了现在我的导航栏是深灰色而不是黑色.将TranslucentNavigation置为false会使条形图变黑,但内容会隐藏它.认为你可以解释为什么这些属性有效,以及如何保持导航栏黑色? (9认同)

mat*_*ani 8

就这么简单,只需将这一行添加到您的父布局 xml 中:

android:fitsSystemWindows="true"
Run Code Online (Sandbox Code Playgroud)

  • 不处理馅饼可能是因为 android M 不起作用 (3认同)

Far*_*han 6

为了获得良好的用户体验,您不需要使用阻止导航键区域 android:windowTranslucentNavigation

相反,这里是更好的解决方案,如果您使用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;
}
Run Code Online (Sandbox Code Playgroud)

如果您正在使用SlidingMenu库,则将mod更改为SLIDING_CONTENT:

menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
Run Code Online (Sandbox Code Playgroud)

希望它能节省你的时间