【问题标题】:Selector background drawable changing color of parent选择器背景可绘制更改父级的颜色
【发布时间】:2014-04-10 17:27:49
【问题描述】:

我想实现一种效果,即我的一个 TextViews 的背景在点击时发生变化。我通过下面的drawable实现了这一点,状态被按下。我遇到了一个奇怪的场景,如果我按下 textview,拖离它,然后松开手指,容器背景变为灰色,但 TextView 背景为白色。

不知何故,可绘制效果被转移到父级并导致这种奇怪的行为。在其他区域点击会导致父背景改变颜色(它应该始终保持白色)。此外,此布局是 ListView 的标题。

<LinearLayout
    android:id="@+id/1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/2"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@drawable/onclick_effect">

        <TextView 
            android:id="@+id/3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/myPublicProfile"/>

        <TextView 
            android:id="@+id/4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>

    <TextView 
        android:id="@+id/5"
        android:layout_width="@dimen/dprEightyFive"
        android:background="@drawable/onclick_effect"
        android:layout_height="match_parent"
        android:gravity="start|center_vertical"/>

</LinearLayout>

可绘制/点击效果

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_pressed="true">
         <color android:color="@color/grey_subtle" /> <!-- pressed -->
    </item>
    <item>
         <color android:color="@color/White"/> 
     </item><!-- default -->
</selector>

【问题讨论】:

  • 尝试为 textview id 5 更改 android:layout_height="wrap_content"
  • 不,还是一样。

标签: android android-layout


【解决方案1】:

在xml中你可以试试

android:duplicateParentState="true"

【讨论】:

  • 我希望父级的状态保持不变。这有什么用?
  • 所以为父布局创建drawable