对于我的应用程序,我想让整个屏幕都是一种颜色。
- activity_main.xml* 的重要部分如下所示:
...
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/green"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
...
字符串
我使用此函数隐藏系统UI:
(演职人员:https://stackoverflow.com/a/37380780/14384063)
private void hideSystemUI(){
int uiOptions = getWindow().getDecorView().getSystemUiVisibility();
int newUiOptions = uiOptions;
if (Build.VERSION.SDK_INT >= 14) {
newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
if (Build.VERSION.SDK_INT >= 16) {
newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
}
if (Build.VERSION.SDK_INT >= 18) {
newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
}
getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
}
型
我还找到了这个,并将其添加到 themes.xml 中:
<!-- Support Display Cutouts -->
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
型
然而,屏幕仍未完全变绿色:
x1c 0d1x的数据
它在模拟器上和我的手机上看起来都是这样的。我错过了什么?理想情况下,我也可以使用这个空间来绘图。
在此先谢谢您!
1条答案
按热度按时间lqfhib0f1#
你应该看看official documentation,里面有一个很好的指南,可以帮助你实现目标。
现在回答你的问题:
它与屏幕颜色不同的原因是,您已经启用了在状态栏下方绘制屏幕内容的功能,但它实际上并没有这样做。
有两种方法可以做到这一点。
1.将状态栏设置为与您的背景相同的颜色
当背景变化不大时(例如,总是一种颜色或在几种纯色之间变化),您可以将状态栏颜色设置为与背景相同。
字符串
Here's a link到一个StackOverflow线程关于这个主题和一些进一步的解释。
2.在状态栏后面绘制背景
目前,您的
ConstraintLayout
是根据Window Insets来调整大小的,Window Insets描述了状态和导航栏等元素的大小。型
到你的
ConstraintLayout
,所以它不confrom到那些。警告:
视图的所有子视图也不符合insets,这就是为什么您必须设置
型
对于直接的孩子。