无法使视图覆盖 FrameLayout 中的另一个视图
Can't make a view overlay another view in FrameLayout
我想让我的 ImageView 位于我的 Button 之上,但无论我选择哪种布局或我如何安排布局,按钮将始终覆盖 ImageView ...这是一个 FrameLayout 的示例我试过了:
编辑:
只是为了简化我的问题:为什么 FrameLayout 不能正常工作? (您可以将此代码复制到您的 Android 工作室并亲自查看)
<?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>
你可以在你想置顶的view上调用bringToFront()
示例:
yourView.bringToFront();
我通过将 Button 更改为 TextView 自己解决了这个问题。 FrameLayout 默认行为在这里不起作用,因为 Android 系统总是将按钮设置为覆盖其他视图(因此用户将始终能够单击按钮)。
我遇到了同样的问题(请注意,如果按钮被禁用,它不会覆盖所有其他视图),并找到了修复方法。只需将按钮和图像包装在单独的子框架布局中。
<FrameLayout>...
<FrameLayout>...
<Button ... />
</FrameLayout>
<FrameLayout>...
<ImageView ... />
</FrameLayout>
</FrameLayout>
我不知道这是否有任何负面影响,除了可能有点低效,但它似乎工作正常。
在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>
我想让我的 ImageView 位于我的 Button 之上,但无论我选择哪种布局或我如何安排布局,按钮将始终覆盖 ImageView ...这是一个 FrameLayout 的示例我试过了:
编辑: 只是为了简化我的问题:为什么 FrameLayout 不能正常工作? (您可以将此代码复制到您的 Android 工作室并亲自查看)
<?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>
你可以在你想置顶的view上调用bringToFront()
示例:
yourView.bringToFront();
我通过将 Button 更改为 TextView 自己解决了这个问题。 FrameLayout 默认行为在这里不起作用,因为 Android 系统总是将按钮设置为覆盖其他视图(因此用户将始终能够单击按钮)。
我遇到了同样的问题(请注意,如果按钮被禁用,它不会覆盖所有其他视图),并找到了修复方法。只需将按钮和图像包装在单独的子框架布局中。
<FrameLayout>...
<FrameLayout>...
<Button ... />
</FrameLayout>
<FrameLayout>...
<ImageView ... />
</FrameLayout>
</FrameLayout>
我不知道这是否有任何负面影响,除了可能有点低效,但它似乎工作正常。
在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>