由ViewPager隐藏的片段

时间:2018-04-07 09:59:58

标签: android android-fragments android-viewpager

我有一个关于ViewTager隐藏的片段的问题。我知道片段就在后面,因为我尝试将ViewPager高度设置为固定的像素数。然后它会在viewpager正下方显示我的容器。但我想要的是viewpager覆盖所有屏幕,当用户点击工具栏中的按钮时,片段应该出现在所有其他视图的顶部 - 即viewpager。

所以我的问题 - 如何让片段显示在所有其他视图之上?

 <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/linlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>

<include layout="@layout/toolbar"/>

<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#4f83cc"
    style="@style/MyCustomTabLayout"
    app:tabMode="scrollable"
    >
</android.support.design.widget.TabLayout>



<android.support.v4.view.ViewPager

    android:id="@+id/viewPager"
    android:layout_below="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

<FrameLayout
    android:id="@+id/container"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:elevation="10dp"
    android:translationZ="5dp"
    >

</FrameLayout>


</LinearLayout>

1 个答案:

答案 0 :(得分:1)

您应该使用FrameLayout。由于您使用的是 LinearLayout ,因此您的片段最终会在您的ViewPager 下面布置,这就是他们的目标。 FrameLayout 总是会将它们叠加在彼此的顶部,从而将其放置在子视图中。

将XML更改为:

class Home extends StatefulWidget {
  @override
  _HomeState createState() => new _HomeState();
}

class _HomeState extends State<Home> {
  String _homeData = "initial data";

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(_homeData),
            new RaisedButton(
              child: new Text("Show Dialog"),
              onPressed: ()async{
                bool shouldUpdate = await showDialog(context: this.context,
               child:new AlertDialog(
                 content: new FlatButton(child: new Text("update home",),
                 onPressed:()=>Navigator.pop(context,true) ,),
               ));
               setState((){
                 shouldUpdate?this._homeData = "updated":null;
               });
               }
            )
          ],
        ),
      ),
    );
  }
}