ViewPager kitkat背后的工具栏

时间:2016-06-23 19:08:50

标签: android android-viewpager android-toolbar android-4.4-kitkat android-elevation

Activity全屏运行。由于Kitkat中缺少提升,ViewPager会超过Toolbar

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/PhotoPager_Layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:theme="@style/ThemeOverlay.AppCompat"
    >
    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar"
        android:background="@color/md_dark_appbar"
        android:windowActionBarOverlay="true"
        />

    <com.horaapps.leafpic.Views.HackyViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/photos_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>

这就是它的样子: screenshot

关于如何解决这个问题的任何建议?

3 个答案:

答案 0 :(得分:2)

RelativeLayout中的项目是z-ordered。 Defaulr oder是:后面的项目背后的早期项目。 您的工具栏首先在RelativeLayout中,因此它位于任何其他视图之后。

有三种解决方案。你可以使用它们中的任何一个。

  1. 在RelativeLayout中重新排序视图:将工具栏移动到结束:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/PhotoPager_Layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:theme="@style/ThemeOverlay.AppCompat"
    >
    
        <com.horaapps.leafpic.Views.HackyViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/photos_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar"
            android:background="@color/md_dark_appbar"
            />
    </RelativeLayout>   
    
  2. 在onCreate()中的某处调用toolbar.bringToFront()(如果您将此布局用于活动)。例如:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        setContentView(R.layout.layout_activity);// your resource name here
    
        View toolbar = findViewById(R.id.toolbar);
        toolbar.bringToFront();
    
        ....
    }
    
  3. 在onCreate的某处调用ViewGroup :: bringChildToFront作为工具栏视图的父级。如果您在活动的onCreate中使用此布局,则代码应为:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.layout_activity);// your resource name here
        RelativeLayout root = findViewById(R.id.PhotoPager_Layout);
        View toolbar = findViewById(R.id.toolbar);
        root.bringChildToFront(toolbar);
    
        ....
    }
    

答案 1 :(得分:0)

您最好为HackyViewPager自定义视图提供代码,以便更好地了解您的问题。但我的猜测是,在那里你不会考虑不同的OS版本计算底部的软按钮(HOME,BACK,MENU)。从Lollipop开始,软按钮是屏幕的一部分,而在早期版本中,它们不在屏幕上。 希望这会有所帮助。

答案 2 :(得分:0)

对我来说,问题出在ScrollView布局,它是ViewPager的父级,当我删除ScrollView时,它可以工作。 接受的答案中的选项没有帮助我解决