我有一个扩展View类的自定义视图。我希望我的自定义视图的2个实例直接在彼此之上分层。我的布局文件应如何实现这一目标?
答案 0 :(得分:29)
原来FrameLayout就是我想要的。只需在您的布局中执行此操作:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<com.proj.MyView
android:id="@+id/board1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<com.proj.MyView
android:id="@+id/board2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</FrameLayout>
答案 1 :(得分:24)
使用RelativeLayout
。 RelativeLayout
的后期孩子将与之前的孩子重叠。
答案 2 :(得分:5)
虽然您可以使用RelativeLayout
和FrameLayout
实现分层,但在API 21及更高版本中......事情已发生变化。
在API 21及更高版本中,xml的后期子代并不意味着它会与早期的子代重叠。相反,它使用Elevation
来确定哪个视图将与其他视图重叠(Z-Index)。
例如,如果你有类似的东西。
<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:text="Hello World"
android:layout_gravity="top" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@android:color/black"
android:layout_gravity="bottom" />
</FrameLayout>
View
即使在Button
之后添加,也不会显示Button
。这是因为View
的海拔高于elevation
。要重新排列Z-Index,您可以将<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:text="Hello World"
android:layout_gravity="top"
android:elevation="0dp" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@android:color/black"
android:layout_gravity="bottom"
android:elevation="2dp" />
</FrameLayout>
属性添加到相应的视图中。
View
这样Button
将与gem 'foundation-rails', '~> 6.2.4'
重叠。
更多信息 海拔高度阴影:https://material.io/guidelines/material-design/elevation-shadows.html