Завершите "кнопку" (LinearLayout с дочерними представлениями) с фоном, который можно нарисовать - при нажатии на детей не отображается "state_pressed"

У меня есть LinearLayout, у которого есть 2 дочерних элемента: ImageView выровнен влево и TextView выровнен вправо.

Я установил фон LinearLayout как XML-ресурс @drawable, который имеет два <item> теги. У одного из них есть android:state_pressed="true", Кроме того, LinearLayout имеет android:clickable="true",

При щелчке LinearLayout он корректно меняет свой фон на android:state_pressed стиль, но нажатие на одного из его дочерних элементов не распространяет действие щелчка до LinearLayout.

Есть ли способ легко достичь состояния щелчка в родительском представлении при щелчке по дочернему представлению?

3 ответа

Решение

Не уверен, что это работает для вашей конкретной реализации, но очень простой способ достижения этой "сложной" кнопки - сделать обычную кнопку и использовать android:drawableLeft или же android:drawableRight или же android:drawableTop или же android:drawableBottom а также android:drawablePaddig добиться того же визуального результата в одном виде.

например:

<LinearLayout orientation=vertical>
    <ImageView/>
    <TextView/>
</LinearLayout>

почти так же, как

<Button
   drawableLeft="@drawable/..."
   text="..."
/>

Таким образом, весь макет становится проще, а нажатые состояния работают "из коробки".

Не используйте оба, поскольку это даст исключение

Используйте это для ваших родителей

android:addStatesFromChildren="true"

Или добавьте в ваши детские взгляды

`android:duplicateParentState="true"` 

Надеюсь, поможет

Рассмотрите возможность использования одного TextView и используя android:drawableLeft или же android:drawableRight атрибут, чтобы показать ваше изображение. Это лучший дизайн и более производительный, чем LinearLayout с двумя детьми

Если это не сработает, попробуйте добавить android:addStatesFromChildren="true" к LinearLayout,

Другие вопросы по тегам