无论布局结构如何,按钮小部件都会绘制在任何其他窗口的顶部.当应用Material Dark / Light主题时,它会在RelativeLayout和FrameLayout中重复.查看下面的截图,以更好地说明这个奇怪的行为.
检查了Nexus 4和Nexus 5.但是我怀疑它与设备有关.
解决方法
Android 5.0 Lollipop以及Material Design引入了新的属性来指定小部件的高程(Z-index).描述
here.
要绘制按钮上的视图,您可以添加android:elevation =“1dp”到视图
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Don't look so deep" /> <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="#C00" android:elevation="1dp" />
以下是早期答案的一部分被误解的问题,供以后参考
使用RelativeLayout,您必须指定元素相对于其他元素的位置.
所以说你想要在按钮下面有一个视图,你必须添加id的元素,并指定视图在按钮下面:
<Button android:id="+id/myactivity_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Don't look so deep" /> <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="#C00" android:layout_below="@id/myactivity_button" />
查看Android Developer Guide for RelativeLayout和available LayoutParameters for RelativeLayouts
FrameLayout通常不适合组织多个组件. FrameLayout旨在阻止屏幕上的一个区域显示单个项目.可以通过使用android:layout_gravity属性来控制FrameLayout子项的位置.
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:text="Don't look so deep" /> <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="#C00" android:layout_gravity="bottom" />
查看Android docs for FrameLayout和available parameters for the layout_gravity