微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 应用材质主题时按钮的渲染顺序错误

无论布局结构如何,按钮小部件都会绘制在任何其他窗口的顶部.当应用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 RelativeLayoutavailable 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 FrameLayoutavailable parameters for the layout_gravity

原文地址:https://www.jb51.cc/android/311391.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐