windowTranslucentNavigation的问题

时间:2014-12-04 10:08:57

标签: android uinavigationbar toolbar statusbar android-support-library

我想让我的navigation bar半透明,所以我做了这样的事情:

 <style name="BlueToolBar" parent="Theme.AppCompat">
    <item name="windowActionBar">false</item>
    <item name="android:colorBackground">@color/action_blue</item>
    <item name="colorPrimary">@color/action_blue</item>
    <item name="colorPrimaryDark">@color/status_bar</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

它运行良好,但我的工具栏和状态栏已合并, merged toolbar

当我使用它时:

<style name="BlueToolBar" parent="Theme.AppCompat">
    <item name="windowActionBar">false</item>
    <item name="android:colorBackground">@color/action_blue</item>
    <item name="colorPrimary">@color/action_blue</item>
    <item name="colorPrimaryDark">@color/status_bar</item>
</style>

resualt是:

nice toolbar

2 个答案:

答案 0 :(得分:16)

有一个更好的解决方案:

只需将android:fitsSystemWindows="true"设置为父布局的xml即可。系统将负责设置正确的paddingTop

答案 1 :(得分:8)

<item name="android:windowTranslucentNavigation">true</item>不仅使导航栏变得半透明,还会导致在状态栏后面绘制活动。

要解决此问题,您可以在工具栏顶部设置边距。

获取状态栏的高度可以通过以下方式完成:

public static int getStatusBarHeight(Context context) {
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

现在通过此设置工具栏的边距(如果您的ToolBar位于LinearLayout中):

((LinearLayout.LayoutParams) toolbar.getLayoutParams()).setMargins(0, getStatusBarHeight(this), 0, 0);