Захват событий LinearLayout onClick с помощью ImageButton внутри него - PullRequest
6 голосов
/ 26 августа 2010

У меня есть ImageButton и TextView, обернутые в LinearLayout, например:

    <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 поддерживается пользовательской отрисовкой для нормальных, сфокусированных и нажатых состояний.Я хотел бы позволить пользователю щелкнуть в любом месте 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 изменилось, поэтому я не хочу устанавливать для него clickable = false.Есть ли способ вспомнить событие?

Ответы [ 4 ]

4 голосов
/ 29 января 2013

Чтобы сделать LinearLayout кликабельным, вам нужно установить android:focusable="false" для всех его дочерних элементов.

0 голосов
/ 19 сентября 2014

Установите android :: clickable = "false" в ImageButton. Это должно помочь.

0 голосов
/ 13 мая 2013

Насколько я понимаю, вам понадобится следующее:

    <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;
    }

}
0 голосов
/ 26 августа 2010

Если вы действительно не хотите, чтобы кнопка не была кликабельной, вы можете просто добавить слушателя к кнопке и выполнить то же действие, что и LinearLayout onClick.Для пользователя это будет выглядеть так, как если бы это была одна большая кнопка.

...