Android: 如何设置状态栏和导航栏半透明
Android: How to set status bar and navigation bar semi transparent
在某些应用程序中,我注意到状态栏和导航栏是透明的,但并非完全透明。我不知道这是背景颜色还是其他原因。有人会告诉我如何实现这个吗?谢谢你。
您可以使用这两种方法:
getWindow().setStatusBarColor(Color.parseColor("#20111111"));
getWindow().setNavigationBarColor(Color.parseColor("#20111111"));
不仅仅是设置导航栏颜色和状态栏颜色,您还必须让您的内容显示在两者下方。
我在我的utils class中使用以下方法将其设置在setContentView
之前的activity
public static void setWindowStatusNav(android.view.Window window, int statusbarColor, int navbarColor) {
int flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT_WATCH) {
window.getAttributes().flags |= flags;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
window.getDecorView().setSystemUiVisibility(uiVisibility);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.getAttributes().flags &= ~flags;
window.setStatusBarColor(statusbarColor);
window.setNavigationBarColor(navbarColor);
}
}
在您的 activity 中使用它:
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
setContentView(R.layout.my_activity);
}
}
要隐藏导航栏和状态栏,请调用此方法:
public static void setWindowStatusNavHidden(android.view.Window window) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiVisibility = window.getDecorView().getSystemUiVisibility();
uiVisibility |= View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
window.getDecorView().setSystemUiVisibility(uiVisibility);
}
}
使用完成:
public class MyActivity extends AppCompatActivity {
static boolean statusNavVisible = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
setContentView(R.layout.my_activity);
Button btnShowHide = findViewById(R.id.my_button);
btnShowHide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (statusNavVisible) {
statusNavVisible = false;
MyUtils.setWindowStatusNavHidden(getWindow());
} else {
statusNavVisible = true;
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
}
}
});
}
}
如果您只是想让它变成半透明的,请将其添加到您的主题中。
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
如果您还希望它隐藏并使您的 activity 全屏显示。
<item name="android:windowActionBarOverlay">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
并在您的 Activity onCreate Add.
requestWindowFeature(Window.FEATURE_NO_TITLE);
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
if (Build.VERSION.SDK_INT >= 30) {
findViewById<ConstraintLayout>(R.id.main_activity_parent).windowInsetsController?.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
} else {
findViewById<ConstraintLayout>(R.id.main_activity_parent).systemUiVisibility =
View.SYSTEM_UI_FLAG_LOW_PROFILE or
View.SYSTEM_UI_FLAG_FULLSCREEN or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
}
在某些应用程序中,我注意到状态栏和导航栏是透明的,但并非完全透明。我不知道这是背景颜色还是其他原因。有人会告诉我如何实现这个吗?谢谢你。
您可以使用这两种方法:
getWindow().setStatusBarColor(Color.parseColor("#20111111"));
getWindow().setNavigationBarColor(Color.parseColor("#20111111"));
不仅仅是设置导航栏颜色和状态栏颜色,您还必须让您的内容显示在两者下方。
我在我的utils class中使用以下方法将其设置在setContentView
public static void setWindowStatusNav(android.view.Window window, int statusbarColor, int navbarColor) {
int flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT_WATCH) {
window.getAttributes().flags |= flags;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
window.getDecorView().setSystemUiVisibility(uiVisibility);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.getAttributes().flags &= ~flags;
window.setStatusBarColor(statusbarColor);
window.setNavigationBarColor(navbarColor);
}
}
在您的 activity 中使用它:
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
setContentView(R.layout.my_activity);
}
}
要隐藏导航栏和状态栏,请调用此方法:
public static void setWindowStatusNavHidden(android.view.Window window) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiVisibility = window.getDecorView().getSystemUiVisibility();
uiVisibility |= View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
window.getDecorView().setSystemUiVisibility(uiVisibility);
}
}
使用完成:
public class MyActivity extends AppCompatActivity {
static boolean statusNavVisible = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
setContentView(R.layout.my_activity);
Button btnShowHide = findViewById(R.id.my_button);
btnShowHide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (statusNavVisible) {
statusNavVisible = false;
MyUtils.setWindowStatusNavHidden(getWindow());
} else {
statusNavVisible = true;
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
}
}
});
}
}
如果您只是想让它变成半透明的,请将其添加到您的主题中。
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
如果您还希望它隐藏并使您的 activity 全屏显示。
<item name="android:windowActionBarOverlay">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
并在您的 Activity onCreate Add.
requestWindowFeature(Window.FEATURE_NO_TITLE);
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
if (Build.VERSION.SDK_INT >= 30) {
findViewById<ConstraintLayout>(R.id.main_activity_parent).windowInsetsController?.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
} else {
findViewById<ConstraintLayout>(R.id.main_activity_parent).systemUiVisibility =
View.SYSTEM_UI_FLAG_LOW_PROFILE or
View.SYSTEM_UI_FLAG_FULLSCREEN or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
}