问题与windowTranslucentNavigation

我想使我的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> 

它工作得很好,但我的工具栏和状态栏被合并, 合并工具栏

当我使用这个:

 <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是:

漂亮的工具栏

Solutions Collecting From Web of "问题与windowTranslucentNavigation"

<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); 

有一个更好的解决scheme:

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