我有一个ImageButton和一个包含在LinearLayout中的TextView,如下所示:
<LinearLayout android:orientation="vertical"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="20" android:gravity="center"
android:clickable="true" android:id="@+id/action_showhide">
<ImageButton android:id="@+id/test"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_toggle_hide_states" android:background="@null"></ImageButton>
<TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtHide"
android:textColor="@drawable/orange" android:textStyle="bold"></TextView>
</LinearLayout>
ImageButton由正常,聚焦和按下状态的自定义drawable支持。我想允许用户单击LinearLayout中的任何位置来触发OnClick事件。下面的代码显示了OnClickListener的设置:
final LinearLayout actionHide = (LinearLayout) findViewById(R.id.action_showhide);
actionHide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(AppAdvocate.TAG, "Event caught");
}
});
当用户单击TextView上的任何位置时,代码会起作用,但当用户单击ImageButton时,事件不会冒泡到LinearLayout。我没有为按钮定义onClickListener。我希望我的ImageButton的drawable可以更改,所以我不想将它设置为clickable = false。有没有办法搞砸事件?
答案 0 :(得分:4)
为了使LinearLayout
可点击,您需要在其所有子元素上设置android:focusable="false"
。
答案 1 :(得分:0)
如果你真的不想使按钮不可点击,你可以只为按钮添加一个监听器并执行与LinearLayout onClick相同的操作。对于用户来说,它似乎是一个大按钮。
答案 2 :(得分:0)
根据我的理解,您将需要以下内容:
<LinearLayout android:orientation="vertical"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="20" android:gravity="center"
android:clickable="true" android:id="@+id/action_showhide">
<ImageButton android:id="@+id/test"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_toggle_hide_states" android:background="@null"> </ImageButton>
<TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtHide"
android:textColor="@drawable/orange" android:textStyle="bold"
android:onClick="viewClicked"></TextView>
</LinearLayout>
之后,您将创建函数:
public void viewClicked(View v){
switch (v.getId())
{
case R.id.action_showhide:
//do something
break;
case R.id.action_showhide:
//do something
break;
}
}
答案 3 :(得分:0)
在ImageButton上设置android :: clickable =“false”。这应该有所帮助。