无法使视图覆盖FrameLayout中的另一个视图

时间:2015-08-08 08:27:18

标签: android relativelayout android-view android-framelayout

我想在我的Button上创建我的ImageView,但是无论我选择哪种布局或者我安排布局的方式,按钮都会覆盖ImageView ...这是我试过的FrameLayout的一个例子:

编辑: 只是为了简化我的问题:为什么FrameLayout不能正常工作? (您可以将此代码复制到Android Studio并亲眼看看)

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:padding="0.1dp">

    <Button
        android:clickable="false"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:text="135"
        android:background="@android:color/holo_blue_bright"
        android:layout_gravity="center"
        android:id="@+id/buttonText"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/triangle"
        android:id="@+id/triangle"
        android:paddingTop="5dp"
        android:layout_gravity="center_horizontal|bottom" />

</FrameLayout>

4 个答案:

答案 0 :(得分:4)

我遇到了同样的问题(注意,如果按钮被禁用,它将不会覆盖所有其他视图),并找到了修复程序。只需将按钮和图像包装在不同的子框架布局中即可。

<FrameLayout>...
    <FrameLayout>...
        <Button ... />
    </FrameLayout>
    <FrameLayout>...
        <ImageView ... />
    </FrameLayout>
</FrameLayout>

我不知道这是否有任何负面影响,除了可能有点效率低下,但似乎工作正常。

答案 1 :(得分:1)

在Android 5.0(API 21)及更高版本中,您必须在视图中添加 android:elevation

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:padding="0.1dp">

    <Button
        android:clickable="false"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:text="135"
        android:background="@android:color/holo_blue_bright"
        android:layout_gravity="center"
        android:id="@+id/buttonText"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/triangle"
        android:id="@+id/triangle"
        android:paddingTop="5dp"
        android:layout_gravity="center_horizontal|bottom"
        android:elevation="3dp" />

</FrameLayout>

答案 2 :(得分:0)

您可以在前面的视图中调用bringToFront()

示例:

yourView.bringToFront();

答案 3 :(得分:-1)

我通过将按钮更改为 TextView 来解决问题。 FrameLayout默认行为在此处不起作用,因为Android系统始终设置按钮以覆盖其他视图(因此用户始终可以单击按钮)。