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

Android 应用材质主题时按钮的渲染顺序错误,android,android-layout,android-theme,Android,Android Layout,Android Theme,无论布局结构是什么,按钮小部件都在任何其他小部件的顶部绘制。应用材质暗/光主题时,它在RelativeLayout和FrameLayout中重复。查看下面的屏幕截图,更好地说明这种奇怪的行为 检查Nexus 4和Nexus 5。但我怀疑这与设备有关 Android 5.0棒棒糖和材质设计引入了新属性,用于指定小部件的标高(Z指数)。对其进行了描述 要在按钮上绘制视图,可以向视图中添加android:elevation=“1dp” <Button android:layout_wi

无论布局结构是什么,按钮小部件都在任何其他小部件的顶部绘制。应用材质暗/光主题时,它在RelativeLayout和FrameLayout中重复。查看下面的屏幕截图,更好地说明这种奇怪的行为

检查Nexus 4和Nexus 5。但我怀疑这与设备有关


Android 5.0棒棒糖和材质设计引入了新属性,用于指定小部件的标高(Z指数)。对其进行了描述

要在按钮上绘制视图,可以向视图中添加
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"
    />
查看和


FrameLayout
通常不适合组织多个组件。FrameLayout设计用于在屏幕上显示单个项目的区域。可以使用
android:layout\u 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"
    />

查看和

从棒棒糖(API 21)开始,Android默认情况下会将提升/Z动画应用于按钮。要避免这种情况,请将以下内容添加到按钮XML中:

<Button
    ...
    android:stateListAnimator="@null"
/>

这将使按钮符合其Z索引


我还注意到,在某些情况下,绘图顺序不是从上到下的。@holtaf:从他的示例中可以看出,他使用的是相对布局。如果他没有为小部件指定布局选项,它们将彼此重叠。因此,问题的解决方案(据我所知)是将布局选项添加到布局xml中。是的,它们将在彼此的顶部绘制,这不是问题,问题是它们的绘制顺序。他们想按顺序画,从上到下,但他们是从下到上画的。@holtaf,你说得对。虽然我无法重现我身边的问题。视图完全画在按钮上。@arnfada您尝试过用材质主题重现它吗?仅当设置了材质主题时才会发生。你能告诉我你使用的是什么版本的支持库吗?@arnfada你是对的,改变了高度,解决了这个问题,但我想我有更好的解决方案。要完全删除按钮提升,请执行以下操作:
这将删除控制按钮提升的
stateListAnimator
<Button
    ...
    android:stateListAnimator="@null"
/>