Android 提升子级时的 FrameLayout z-index 问题
Android FrameLayout z-index issue when child is elevated
我有以下 Android XML 布局文件:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/AutoComplete_marginSides"
android:layout_marginRight="@dimen/AutoComplete_marginSides"
android:layout_marginTop="@dimen/AutoComplete_marginTopBottom"
android:layout_marginBottom="@dimen/AutoComplete_marginTopBottom"
android:layout_marginLeft="@dimen/AutoComplete_marginSides"
android:layout_marginStart="@dimen/AutoComplete_marginSides"
android:id="@+id/autoCompleteLayout" >
<MyPackage.maps.DelayAutoCompleteTextView
android:id="@+id/geoAutoComplete"
android:layout_margin="@dimen/AutoCompleteTextView_layoutMargin"
android:layout_width="match_parent"
android:layout_height="@dimen/AutoCompleteTextView_height"
android:layout_gravity="center"
android:gravity="start|center_vertical"
android:inputType="textCapSentences"
android:background="@color/white"
android:paddingLeft="@dimen/AutoCompleteTextView_padding"
android:paddingRight="@dimen/AutoCompleteTextView_padding"
android:dropDownWidth="fill_parent"
android:textSize="@dimen/AutoCompleteTextView_fontSize"
android:hint="@string/search_map"
android:elevation="2dp"
android:singleLine="true"
android:maxLength="30"/>
<ImageView
android:id="@+id/geoAutoCompleteClear"
android:layout_gravity="center_vertical|end"
android:contentDescription="@string/search_map_clear"
android:layout_marginEnd="@dimen/AutoCompleteTextView_clearIconMargins"
android:layout_marginRight="@dimen/AutoCompleteTextView_clearIconMargins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_clear"/>
</FrameLayout>
FrameLayout
布局在 RelativeLayout
内部(我没有在上面显示)。这个 FrameLayout
只是文本视图,末尾有一个叉号以删除文本。
问题是当我将 android:elevation
添加到 TextView
时 ImageView
落后于 TextView
尽管它不应该因为我在 [=16 之后定义了它=] 本身。据我所知,子序列决定了组件的显示方式。但是当我从 TextView
中删除 elevation
时,ImageView
会正确显示。
我是不是漏掉了什么?这是什么原因?
android:elevation
覆盖了 FrameLayout 或 RelativeLayout 中 z 索引的典型概念。您所看到的是正确的行为。您可以将 ImageView 的高度设置为“3dp”,这应该会为您提供预期的顺序。
我有以下 Android XML 布局文件:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/AutoComplete_marginSides"
android:layout_marginRight="@dimen/AutoComplete_marginSides"
android:layout_marginTop="@dimen/AutoComplete_marginTopBottom"
android:layout_marginBottom="@dimen/AutoComplete_marginTopBottom"
android:layout_marginLeft="@dimen/AutoComplete_marginSides"
android:layout_marginStart="@dimen/AutoComplete_marginSides"
android:id="@+id/autoCompleteLayout" >
<MyPackage.maps.DelayAutoCompleteTextView
android:id="@+id/geoAutoComplete"
android:layout_margin="@dimen/AutoCompleteTextView_layoutMargin"
android:layout_width="match_parent"
android:layout_height="@dimen/AutoCompleteTextView_height"
android:layout_gravity="center"
android:gravity="start|center_vertical"
android:inputType="textCapSentences"
android:background="@color/white"
android:paddingLeft="@dimen/AutoCompleteTextView_padding"
android:paddingRight="@dimen/AutoCompleteTextView_padding"
android:dropDownWidth="fill_parent"
android:textSize="@dimen/AutoCompleteTextView_fontSize"
android:hint="@string/search_map"
android:elevation="2dp"
android:singleLine="true"
android:maxLength="30"/>
<ImageView
android:id="@+id/geoAutoCompleteClear"
android:layout_gravity="center_vertical|end"
android:contentDescription="@string/search_map_clear"
android:layout_marginEnd="@dimen/AutoCompleteTextView_clearIconMargins"
android:layout_marginRight="@dimen/AutoCompleteTextView_clearIconMargins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_clear"/>
</FrameLayout>
FrameLayout
布局在 RelativeLayout
内部(我没有在上面显示)。这个 FrameLayout
只是文本视图,末尾有一个叉号以删除文本。
问题是当我将 android:elevation
添加到 TextView
时 ImageView
落后于 TextView
尽管它不应该因为我在 [=16 之后定义了它=] 本身。据我所知,子序列决定了组件的显示方式。但是当我从 TextView
中删除 elevation
时,ImageView
会正确显示。
我是不是漏掉了什么?这是什么原因?
android:elevation
覆盖了 FrameLayout 或 RelativeLayout 中 z 索引的典型概念。您所看到的是正确的行为。您可以将 ImageView 的高度设置为“3dp”,这应该会为您提供预期的顺序。