我有一个关于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>
答案 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;
});
}
)
],
),
),
);
}
}