问题
I want to make my ImageView on top of my Button, but the button will always overlay the ImageView , no matter which layout I choose or the way I arrange my layout... this is an example of a FrameLayout that I tried:
EDIT: just for simplifying my question : Why doesn't the FrameLayout work as it should? (you can copy this code to your Android Studio and see yourself)
<?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>
回答1:
I experienced the same issue (of note, if the button is disabled it would not overlay all the other views), and found a fix. Simply wrap the button and image in separate sub-frame layouts.
<FrameLayout>...
<FrameLayout>...
<Button ... />
</FrameLayout>
<FrameLayout>...
<ImageView ... />
</FrameLayout>
</FrameLayout>
I don't know if this has any negative repercussions, aside from perhaps a bit of inefficiency, but it seems to work fine.
回答2:
In the Android 5.0 (API 21) and above, you must add android:elevation into the view.
<?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>
回答3:
You can call bringToFront() on the view you want to get in the front
Example:
yourView.bringToFront();
回答4:
I solved the problem myself by changing the Button to TextView . The FrameLayout default behavior isn't working here because Android system always set Buttons to overlay other views (so the user will always be able to click the button).
来源:https://stackoverflow.com/questions/31891202/cant-make-a-view-overlay-another-view-in-framelayout