【问题标题】:fitsSystemWindows ignored by ConstraintLayout约束布局忽略了fitsSystemWindows
【发布时间】:2018-08-17 00:44:45
【问题描述】:

我试图在我的应用程序中显示状态栏完全透明的活动。我将此添加到我的风格中:

<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

但由于某种原因,我的所有视图都显示在状态栏下方。所有视图都与父 app:layout_constraintTop_toTopOf="parent" 顶部对齐。

【问题讨论】:

    标签: android android-support-library android-constraintlayout android-statusbar


    【解决方案1】:

    我通过在我的活动中添加以下代码来修复它:

    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    

    【讨论】:

    • 这仅适用于您的情况,因为您希望导航栏也透明。如果有人只希望状态栏是透明的,那对他们来说是行不通的。
    【解决方案2】:

    因为我想在状态栏后面显示我的布局,但仍然保持导航栏不变,这对我有用:

    &lt;item name="android:statusBarColor"&gt;@android:color/transparent&lt;/item&gt; 添加到我的活动主题中

    由于ConstraintLayout 似乎不尊重fitsSystemWindows,因此将其包装在CoordinatorLayout 中。

    android:fitsSystemWindows="true" 添加到我的CoordinatorLayout。 添加到我的ConstraintLayout

    android:fitsSystemWindows="true"
    android:clipToPadding="false"
    android:clipChildren="false"
    

    【讨论】:

    • android:fitsSystemWindows="true" 实际上受到ConstraintsLayout 的尊重。不需要用CoordinatorLayout 包裹ConstraintLayout
    • 另外,如果你只添加&lt;item name="android:statusBarColor"&gt;@android:color/transparent&lt;/item&gt;而不是&lt;item name="android:windowTranslucentStatus"&gt;true&lt;/item&gt;,你甚至不必添加android:fitsSystemWindows="true"
    • 嗯,这对我有用。我稍后会添加我的完整主题配置!
    • 是的。这会起作用,但我要说的是,您添加的内容超出了您的需要。该评论适用于将来会查看此帖子的其他所有人。
    • 好吧,在您发表评论之后,我继续删除了 CoordinatorLayout,但我无法让它以这种方式工作。 ConstraintLayout 不会在状态栏下方伸展。
    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2016-11-04
    • 2015-01-02
    相关资源
    最近更新 更多