FrameLayout的顺序,以及elevation对其顺序的影响,CardView的上层放了一个Button,为什么Button看不到了

  • Post author:
  • Post category:其他




Android中

FrameLayout

(帧布局)

默认的 下一个会自动覆盖上一个




<FrameLayout





xmlns:


android


=


“http://schemas.android.com/apk/res/android”





android


:layout_width=


“match_parent”





android


:layout_height=


“match_parent”


>






<View





android


:layout_width=


“120dp”





android


:layout_height=


“120dp”





android:background=”@color/red”


/>






<View





android


:layout_width=


“100dp”





android


:layout_height=


“100dp”





android:background=”@color/yellow”


/>






<View





android


:layout_width=


“60dp”





android


:layout_height=


“60dp”





android:background=”@color/gray”


/>






</FrameLayout>



设置

elevation能改变FrameLayout的顺序

,有

阴影的时候,将不会遵循默认的自动覆盖逻辑



elevation最大的值会在最上层




<FrameLayout





xmlns:


android


=


“http://schemas.android.com/apk/res/android”





android


:layout_width=


“match_parent”





android


:layout_height=


“match_parent”


>






<View





android


:layout_width=


“120dp”





android


:layout_height=


“120dp”





android


:background=


“@color/red”


/>






<View





android:elevation=



“1dp”






android


:layout_width=


“100dp”





android


:layout_height=


“100dp”





android


:background=


“@color/yellow”


/>






<View





android


:layout_width=


“60dp”





android


:layout_height=


“60dp”





android


:background=


“@color/gray”


/>






</FrameLayout>





这样就可以解释View覆盖的问题了,比如:

我明明在CardView的上层放了一个TextView,为什么TextView看不到了

??? 效果如下


<FrameLayout





xmlns:


android


=


“http://schemas.android.com/apk/res/android”





xmlns:


app


=


“http://schemas.android.com/apk/res-auto”





android


:layout_width=


“match_parent”





android


:layout_height=


“match_parent”


>






<android.support.v7.widget.CardView





android


:layout_width=


“200dp”





android


:layout_height=


“200dp”





app


:cardBackgroundColor=


“@color/red”





/>






<TextView





android


:layout_width=


“100dp”





android


:layout_height=


“60dp”





android:background=



“@color/yellow”






android


:text=


“button”


/>



</FrameLayout>




从上面的效果中可以看出,

TextView中我明明设置了背景,并且处于最上层,但是效果图中却没有

。这是因为,

CardView默认有elevation属性,所有会自动处于最上层








<FrameLayout





xmlns:


android


=


“http://schemas.android.com/apk/res/android”





xmlns:


app


=


“http://schemas.android.com/apk/res-auto”





android


:layout_width=


“match_parent”





android


:layout_height=


“match_parent”


>






<android.support.v7.widget.CardView





android


:layout_width=


“200dp”





android


:layout_height=


“200dp”





app:cardElevation=



“0dp”






app


:cardBackgroundColor=


“@color/red”





/>






<TextView





android


:layout_width=


“100dp”





android


:layout_height=


“60dp”





android:background=



“@color/yellow”






android


:text=


“button”


/>



</FrameLayout>







将cardElevation设置为0dp后,这样TextView就能正常显示了。



版权声明:本文为jianesrq0724原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。