KitKat中的半透明系统栏和内容边距

我试图利用新的KitKat半透明系统吧,以获得在我的应用程序的背景下的全屏图像。

我有问题搞清楚正确的设置,以得到我想要的行为。 现在我有一个ViewPager与三个Fragment每个由一个包含ImageView (用于背景图像)的RelativeLayout和一个用于内容的TextView

我所追求的是让内容完全适合可用于交互的屏幕部分,并使图像占据屏幕的整个可见部分。

如果我只是使用android:Theme.Holo.Light.NoActionBar.TranslucentDecor作为我的主题,它在纵向上看起来不错,但是导航条与横向上的内容重叠(请参见下面的截图)。

第一次尝试 - 肖像。看起来不错。第一次尝试 - 景观。导航栏与内容重叠

按照文档中的build议 ,我将android:fitsSystemWindows = true添加到了我的主题中,但是会生成一些奇怪的构件(请参见下文) 第二次尝试 - 肖像。神器!第二次尝试 - 景观。神器!

我怎样才能使它像第二个例子,但看起来不错,没有视觉文物?

Solutions Collecting From Web of "KitKat中的半透明系统栏和内容边距"

我知道这已经很老了,但是我遇到了同样的问题,并find了一个简单的解决scheme,所以我想分享它,以防Google被任何人遇到。

当一个ViewPager(特别是一个ImageSwitcher)被放置在具有属性android:fitsSystemWindows="true"的布局中时,似乎有一个Android bug。 出于某种原因,系统窗口似乎正在得到遍及他们的文物。 :/

无论如何,我find了一个修复。 对于我的活动,我有一个XML布局如下:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" <!-- NOT HERE! android:fitsSystemWindows="true" --> android:layout_width="match_parent" android:layout_height="match_parent"> <ImageSwitcher android:id="@+id/background_image_switcher" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="0dp" android:layout_margin="0dp" android:background="@color/background_dark_navy" android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out" > <ImageView style="@style/BlurredBackgroundImage" /> <ImageView style="@style/BlurredBackgroundImage" /> </ImageSwitcher> <FrameLayout android:fitsSystemWindows="true" <!-- Here!!! --> android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Fitted content here --> </FrameLayout> 

诀窍是不包含具有android:fitsSystemWindows="true"属性的布局中的android:fitsSystemWindows="true" ,而是将android:fitsSystemWindows="true"属性移动到包含我需要的实际内容的内部 FrameLayout(标题文本在你的情况)。 不幸的是,这允许ImageSwitcher / ViewPager的视图被系统窗口略微切断,但是如果图像像背景图像一样使用,无论如何都不重要,并且比文物更好的折衷或维护所有不同尺寸/样式的可能或不可以禁用导航(例如当前select的答案)。

我希望这可以帮助别人!

我的解决scheme是禁用横向模式下的半透明导航。 您仍然会看到一个半透明的状态栏,但是它解决了导航栏不透明且横向重叠的问题。

res / values-v19 / styles.xml (这些值在我的主题中)

 <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">@bool/translucentNavBar</item> 

res / values-v19 / bools.xml (启用半透明导航)

 <bool name="translucentNavBar">true</bool> 

res / values-land-v19 / bools.xml (在横向上禁用半透明导航)

 <bool name="translucentNavBar">false</bool> 

res / values-sw600dp-land-v19 / bools.xml (为横向平板电脑启用半透明导航)

 <bool name="translucentNavBar">true</bool> 

我遇到类似的问题,但我没有使用ViewPager,所以这可能无法正常工作。 我通过做一些嵌套解决Gabe所描述的:只有内部的ViewGroup是fitSystemWindows =“true”,所以显示背景的外部ViewGroup因此被允许在半透明条之下延伸。 然后,我还调用requestFitSystemWindows()方向更改。 同样,您的ViewPager可能会使事情变得复杂,我的解决scheme将无法正常工作,但我希望这有助于。

把另一个ViewGroup放在图像的一个里面,并且把系统窗口设置为true

你应该把它包装在一个线性布局中,并把fitsSystemWindows设置为true。