我在Android API等级19上运行此代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
final Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
状态栏是半透明的,但顶部有一个奇怪的偏移。它在android 5上运行完美。
以下是布局的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<FrameLayout
android:id="@+id/statusbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="20dp"
android:background="?attr/colorPrimary">
<android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/toolbar"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:id="@+id/content_container" />
</LinearLayout>
答案 0 :(得分:2)
是的,我已经尝试过,但这不起作用。
使用此库: https://github.com/jgilfelt/SystemBarTint
以下是教程:
http://blog.raffaeu.com/archive/2015/04/11/android-and-the-transparent-status-bar.aspx
<强>代码:强>
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setNavigationBarTintEnabled(true);
tintManager.setTintColor(Color.parseColor("#20000000"));
您也可以尝试使用以下方法查找状态栏的高度:
// A method to find height of the status bar
public int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
我这样做了,而且工作正常:
在drawable文件夹中创建 XML 文件(例如:
kitkat_status_bar
)并将这些代码放在其上:
<?xml version="1.0" encoding="utf-8"?>
<layer-list>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/ColorPrimary"/>
</shape>
</item>
</layer-list>
然后,您可以将这些代码用于Activity
:
if (Build.VERSION.SDK_INT < 19) {
AppUtilsSetting.setTitleBarTint(this);
}
以下是课程:
public static class AppUtilsSetting {
public static void setTitleBarTint(Activity ac) {
ac.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
SystemBarTintManager tintManager = new SystemBarTintManager(ac);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintDrawable(ac.getResources().getDrawable(R.drawable.kitkat_status_bar));
}
}