为什么FrameLayout没有在我的布局中正确设置Z顺序?

时间:2016-02-27 11:56:27

标签: android android-layout android-framelayout

我有以下布局(这里提供了更简单的设计):

less

我希望将带有文本“AAAA”的TextView设置为Button的徽章,即放置在其右上角的按钮上,但事实并非如此。

相反,当我在带有Lollipop的HTC One M7或带有Lollipop的Genymotion Nexus 6上尝试此代码时,屏幕看起来像这样:

Screenshot of views badly placed

当我在Genymotion Nexus 5上使用KitKat尝试相同的代码时,一切看起来都符合预期,即第一个视图(按钮)显示在徽章(textview)下面

有没有人知道这里有什么问题?

谢谢, Deveti

3 个答案:

答案 0 :(得分:5)

elevation导致此问题。它在Lollipop中引入并负责z-ordering。将您的布​​局复制到layout-v21并为该按钮设置android:elevation="0dp"

答案 1 :(得分:1)

我在使用FrameLayout时遇到了类似的问题,它用作进度指示器叠加层(当我的屏幕正忙于加载时)。

我不想将XML添加到应用程序中的所有其他元素,因此我只是向FrameLayout叠加层添加了一个高程。请注意clickable属性,该属性可确保click事件不会传递到下面的按钮。

进度指示器叠加层:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/progress_overlay"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:alpha="0.4"
    android:background="@android:color/black"
    android:animateLayoutChanges="true"
    android:elevation="10dp"
    android:clickable="true"
    android:visibility="gone">

    <ProgressBar
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:indeterminate="true"/>

</FrameLayout>

在其他视图中包括进度指示器:

<include layout="@layout/progress_overlay"/>

来自https://stackoverflow.com/a/29542951/1912127

的原始解决方案

答案 2 :(得分:0)

我在另一个线程上看到了这个,但是你可以把它放到你的元素中:

android:stateListAnimator="@null"

正如其他人所说,lolipop和up中的按钮高度发生了变化,因此它覆盖了其他元素。

例如在我的按钮视图中,我使用它并显示:

<FrameLayout
    android:id="@+id/ib_one_container"

    android:layout_width="38dp"
    android:layout_height="38dp"
    android:layout_marginLeft="5.3dp"
    android:orientation="vertical"
    android:padding="3dp"
    >


    <Button
        android:id="@+id/ib"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:clickable="true"
        android:gravity="center"
        android:stateListAnimator="@null"
        android:textSize="11sp" />


    <com.mobile.pomelo.UI.customViews.CustomDiagonalLineView
        android:id="@+id/diagaonal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"

        />


</FrameLayout>