我正在尝试利用新的KitKat半透明系统条,在我的应用程序的背景中获得全屏图像。
我在找出正确的设置以获得我想要的行为时遇到了问题。现在我有ViewPager
个Fragment
个,每个RelativeLayout
由一个ImageView
组成,其中包含TextView
(用于背景图片)和android:Theme.Holo.Light.NoActionBar.TranslucentDecor
内容。
我所追求的是让内容完全适合可用于交互的屏幕部分,并使图像占据屏幕的整个可见部分。
如果我只使用android:fitsSystemWindows = true
作为我的主题,它在纵向上看起来很好,但导航栏与横向内容重叠(请参阅下面的屏幕截图)。
关注the recommendation in the docs后,我在主题中添加了{{1}},但这会产生一些奇怪的文物(见下文)
如何让它在第二个示例中表现得更好,但看起来不错,没有视觉瑕疵?
答案 0 :(得分:39)
我的解决方案是在横向模式下禁用半透明导航。您仍然可以获得半透明的状态栏,但它解决了导航栏不透明并且在横向上重叠的问题。
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>
答案 1 :(得分:7)
我知道这已经过时了,但是我遇到了同样的问题并找到了一个简单的解决方案,所以我想分享一下,以防万一谷歌遇到这种情况。
当ViewPager(尤其是ImageSwitcher)放置在具有属性android:fitsSystemWindows="true"
的布局中时,似乎存在Android错误。由于某种原因,系统窗口似乎正在获取遍布它们的工件。 :/
无论如何,我找到了解决办法。对于我的活动,我有一个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"
属性的布局中包含ImageSwitcher,而是将android:fitsSystemWindows="true"
属性移动到包含实际内容的内部 FrameLayout需要适合(你的案例中的标题文本)。不幸的是,这允许ImageSwitcher / ViewPager的视图被系统窗口略微切断,但如果图像像背景图像一样使用它无关紧要,并且比工件或维护所有更好可能有也可能没有禁用导航的不同尺寸/样式(例如当前选择的答案)。
我希望这有助于某人!
答案 2 :(得分:3)
我遇到了类似的问题,但我没有使用ViewPager,所以这可能无效。我通过Gabe描述的嵌套来解决:只有内部ViewGroup是fitSystemWindows =“true”,因此允许显示背景的外部ViewGroup在半透明条下延伸。然后我也打电话给requestFitSystemWindows()进行方向更改。同样,您的ViewPager可能会使事情变得复杂,我的解决方案将无法正常工作,但我希望这会有所帮助。
答案 3 :(得分:2)
将另一个ViewGroup放在带有图像的那个ViewGroup中,并将fitsSystemWindows设置为true
答案 4 :(得分:-3)
您应该将其包含在线性布局中,并将fitsSystemWindows
设置为true。