Android - 在 TextView 上设置按下状态和边框 - 只有一个背景

Pat*_*bee 3 android android-selector android-drawable

我在 LinearLayout 中有 3 个垂直堆叠的 TextView

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:textSize="@dimen/text_size_large"
        android:text="Item1"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:textSize="@dimen/text_size_large"
        android:text="Item2"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:textSize="@dimen/text_size_large"
        android:text="Item3"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我可以将 drawable 应用到背景属性以呈现边框

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:top="-2dp" android:right="-2dp" android:left="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke android:width="1dp" android:color="@color/pale_grey" />
            <padding android:left="24dp" android:right="24dp" 
                       android:top="12dp" android:bottom="12dp" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

我还可以通过可绘制对象将选择器应用于背景属性,以便 TextView 根据状态(例如按下)更改颜色。然而,只有一种背景属性。

我不相信我可以在同一个 drawable 中应用<shape> xml 和<selector> xml。因此,我是否需要在每个 TextView 周围包裹一个布局元素才能应用另一个背景?

看起来谷歌通过将边框、填充和背景颜色包含在一个可绘制的补丁 9 图像中来解决这个问题。我希望我不需要那样做

谢谢

She*_*ady 5

在选择器中,使用呈现边框的 XML 设置按下和未按下的状态

例子:

<selector     xlmns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/border_unpressed" android:state_pressed="false"/> 
 <item android:drawable="@drawable/border_pressed" android:state_pressed="true"/>
 <item android:drawable="@drawable/border_unpressed" />

</selector>
Run Code Online (Sandbox Code Playgroud)

注意:确保将 TextView 属性设置为 android:clickable="true"