Ali*_*lli 8 android android-statusbar
如您所知,我们可以windowLightStatusBar通过以下代码设置from xml.
<item name="android:windowLightStatusBar">true</item>
Run Code Online (Sandbox Code Playgroud)
我需要通过编程方式将此属性true更改为false或false更改为true.有没有办法实现它?
Eli*_*zel 14
如果要更改图标颜色,请设置此项
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_??BAR);
Run Code Online (Sandbox Code Playgroud)
并重置为默认设置此项
.setSystemUiVisibility(0);
Run Code Online (Sandbox Code Playgroud)
但是如果你想改变statusBar的背景颜色,请使用它
getWindow.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));
Run Code Online (Sandbox Code Playgroud)
小智 13
Hidro 的答案几乎是正确的,但 WindowInsetsControllerCompat 需要作为函数调用才能工作,否则它声称在我的情况下存在未解析的引用。
对于科特林:
WindowInsetsControllerCompat(window, yourView).isAppearanceLightStatusBars = true
Run Code Online (Sandbox Code Playgroud)
对于Java:
WindowInsetsControllerCompat(getWindow(), yourView).setAppearanceLightStatusBars(true)
Run Code Online (Sandbox Code Playgroud)
implementation "androidx.core:core-ktx:1.6.0"
Run Code Online (Sandbox Code Playgroud)
活动
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = true
}
}
Run Code Online (Sandbox Code Playgroud)
在 Android 8 和 Android 12 上测试。运行良好
要清除此属性,请使用以下代码:
window.clearFlags( View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)
Run Code Online (Sandbox Code Playgroud)
我相信这是打开和关闭的正确方法。
if (on) {
View view = getWindow().getDecorView();
view.setSystemUiVisibility(view.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
View view = getWindow().getDecorView();
view.setSystemUiVisibility(view.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7228 次 |
| 最近记录: |