Mos*_*reh 10 android toolbar statusbar uinavigationbar 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>
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但我的工具栏和状态栏已合并,

当我用这个:
<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>
Run Code Online (Sandbox Code Playgroud)
resualt是:

<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;
}
Run Code Online (Sandbox Code Playgroud)
现在通过此设置工具栏的边距(如果您的ToolBar位于LinearLayout中):
((LinearLayout.LayoutParams) toolbar.getLayoutParams()).setMargins(0, getStatusBarHeight(this), 0, 0);
Run Code Online (Sandbox Code Playgroud)