Android:View上的OnClick / TouchListener未委托给LinearLayout

时间:2016-02-12 16:50:11

标签: android android-layout android-linearlayout onclicklistener

我有一个菜单弹出活动,其中包含一些要点击的菜单点。一个菜单条目具有以下模式:

menu entry text [IMAGE]

如果用户单击文本,则单击侦听器可以正常工作。如果用户单击ImageView,则尽管在周围的LinearLayout上设置了侦听器,但侦听器仍无法工作。 首先,我使用ImageButton代替ImageView。但是不会同时调用单击侦听器。我试图添加这些属性:

android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false"

不起作用。
我尝试了onTouchListener而不是onClickListener,但也无效。任何想法如何使图像也可点击?以下是代码的重要部分:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/screen_menupopup"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/transparent_black"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/menu_item_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/item_sort_abc_asc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/sort_abc_asc"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:text="@string/cookbook_sort_abc_asc"
                android:textColor="@color/white" />

            <ImageView
                android:id="@+id/button_menu_item"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@color/transparent"
                android:clickable="true"
                android:focusable="false"
                android:focusableInTouchMode="false"
                android:src="@drawable/ic_configbutton_item" />
        </LinearLayout>
    ....

活动代码:

View viewSortAsccending = findViewById(R.id.item_sort_abc_asc);
viewSortAsccending.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View arg0)
    {
        Intent returnIntent = new Intent();
        returnIntent.putExtra(RequestCode.SORT_ORDER_ALPHABETICAL_ASC.toString(), true);
        setResult(RESULT_OK, returnIntent);
        menuItemContainer.startAnimation(animationFadeOut);
    }
});

2 个答案:

答案 0 :(得分:0)

将您的Imageview的XML更改为:

<ImageView
            android:id="@+id/button_menu_item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/transparent"
            android:clickable="true"

            android:onClick="imageview_button"

            android:src="@drawable/ic_configbutton_item" />

然后将您的活动代码更改为:

    public void imageview_button(View view) {
            Intent returnIntent = new Intent();
    returnIntent.putExtra(RequestCode.SORT_ORDER_ALPHABETICAL_ASC.toString(), true);
    setResult(RESULT_OK, returnIntent);
    menuItemContainer.startAnimation(animationFadeOut);
}

在这里工作正常! 希望这会有所帮助。

答案 1 :(得分:0)

您可以尝试:

LinearLayout viewSortAsccending = (LinearLayout) findViewById(R.id.item_sort_abc_asc);

并删除imageView中的所有以下参数:

android:clickable="true" android:focusable="false" android:focusableInTouchMode="false"

LinearLayout将按预期处理OnClick。 但实际上我不知道为什么如果你不将视图转换为LinearLayout,行为就不一样了?如果有人有答案,那么更新这篇文章会很好。