Android:如何将click事件传播到LinearLayout子项并更改其drawable

Bhi*_*fer 19 android onclick android-linearlayout

我想创建一个线性布局,其行为与ImageButton类似.

<LinearLayout
    android:id="@+id/container"
    style="?WidgetHomeIconContainer">            

    <ImageView
        android:id="@+id/icon"
        style="?WidgetHomeIcon" />

    <TextView
        android:id="@+id/title"
        style="?WidgetHomeLabel"             
        android:text="@string/title"
        android:textAppearance="?attr/TextHomeLabel" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在ImageView,TextView和LinearLayout的样式中,我为所有状态设置了一个选择器.

现在:

  • 当我点击ImageView(我也尝试使用ImageButton) - 它的行为正确并且图像根据选择器xml进行了更改.
  • 当我点击LinearLayout时 - 单击线性布局,但ImageView和TextView不会改变它的可绘制/外观

所以我想做以下几点.当我点击父LinearLayout时,我需要将它的所有子项更改为按下状态.

我尝试将以下代码添加到LinearLayout onClickListener以传播点击:

@Override
public void onClick(View v)
{
    LinearLayout l = (LinearLayout) v;
    for(int i = 0; i < l.getChildCount(); i++)
    {
        l.getChildAt(i).setClickable(true);
        l.getChildAt(i).performClick();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它仍然保持相同的状态.非常感谢您的帮助.

5hs*_*sba 44

android:duplicateParentState="true"
Run Code Online (Sandbox Code Playgroud)

在你的ImageView和TextView .. 然后视图从其直接父级而不是从它自身获得其可绘制状态(聚焦,按下等).

  • android:duplicateParentState="true" 对我不起作用,知道为什么吗? (2认同)
  • 我有同样的问题,但点击有效而选择器无效,知道吗? (2认同)

Evu*_*sas 7

不仅让每个孩子:

android:duplicateParentState="true"
Run Code Online (Sandbox Code Playgroud)

但另外:

android:clickable="false"  
Run Code Online (Sandbox Code Playgroud)

如果使用可点击的子视图,这将防止意外行为(或解决方案根本不起作用)。

SO 来源