0

我有ViewPagerFragments其中包含全屏圖像和一些底部對齊的控件。使用ViewPager和fitsSystemWindow控制後面的狀態欄

我想,以確保控制不半透明導航欄消失背後用fitsSystemWindow,但我似乎無法使它工作...

它的工作時,我用的是相同的XML沒有ViewPager所以看起來ViewPager「打破」了使用fitsSystemWindow的能力。

代碼,我的活動:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</FrameLayout> 

這就是我對片段:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:background="#000" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/initial_background_image" 
     android:scaleType="centerCrop"/> 

    <RelativeLayout 
     android:id="@+id/buttons_container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="@dimen/button_icon_offset" 
     android:layout_marginBottom="@dimen/button_icon_offset" 
     android:layout_marginRight="@dimen/button_icon_offset" 
     android:fitsSystemWindows="true" 
     android:layout_gravity="bottom"> 

     <Button 
      android:id="@+id/info_button" 
      style="@style/button_icon" 
      android:layout_gravity="left|bottom" 
      android:background="@drawable/button_info" 
      android:textAlignment="center"/> 

     <Button 
      android:id="@+id/share_button" 
      style="@style/button_icon" 
      android:layout_alignTop="@id/info_button" 
      android:layout_marginRight="@dimen/button_icon_divider" 
      android:layout_toLeftOf="@+id/like_button" 
      android:background="@drawable/button_share"/> 

     <Button 
      android:id="@+id/like_button" 
      style="@style/button_icon" 
      android:layout_alignParentRight="true" 
      android:background="@drawable/button_like"/> 
    </RelativeLayout> 
</FrameLayout> 

原來這就是我結束了......但是,我想要的按鈕出現以上的導航欄。

This is what I dont want

回答

0

首先,看看有關WindowInset小號this答案。然後你會明白,你的根目錄佈局 - FrameLayout將永遠不會發送WindowInset s到ViewPager

使用ViewCompat.setOnApplyWindowInsetsListener() API派遣WindowInset s到ViewPager,使您的ViewPager適合窗口插圖,即適用android:fitsSystemWindows="true"ViewPager和它的母公司。如果仍然沒有工作

+0

謝謝你的回答,我讀了它。我不明白的是,如果我在活動中使用類似的佈局,即使我將按鈕多次包裝到FrameLayout中,它也能正常工作。然後'fitsSystemWindows'仍然在嵌套的子視圖內工作。 – Thijs

0

只是改變/在你style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    ...  
    <item name="android:windowDrawsSystemBarBackgrounds">false</item> 
    ... 
</style> 

刪除此?和你使用NestedScrollView然後添加「機器人:clipToPadding」

<android.support.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/light_green" 
      android:clipToPadding="false" <--add this 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
0

你可以保證金底部添加的按鈕將它們放置在導航欄的上方。

android:layout_marginBottom="?attr/actionBarSize"