Can't make a view overlay another view in FrameLayout

无人久伴 提交于 2019-12-23 11:49:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!