У LinearLayout
меня есть стиль, который я стилизовал под a button
, и он содержит несколько элементов text / ImageView. Я хотел бы сделать все LinearLayout
действие как a button
, в частности, чтобы дать ему состояния, которые определены в a, чтобы у него был другой фон при нажатии.
Есть ли лучший способ, чем задать ImageButton
размер всего макета и разместить его в абсолютном размере?
android
android-layout
Джейсон Прадо
источник
источник
LinearLayout
какToggleButton
Ответы:
Я столкнулся с этой проблемой только сейчас. Вам нужно будет сделать LinearLayout интерактивным. Вы можете сделать это в XML с помощью
Или в коде с
Ура!
источник
android:clickable="false"
к нему, чтобы он не блокировал события клика.Если вы хотите добавить фоновое поведение Android по умолчанию, чтобы сделать
Layout
действия как «кликабельные»View
, установите для целиLayout
:API 11+ (чистый Android):
API 7+ (библиотека поддержки Android + AppCompat):
Любой API:
Ответы выше по-прежнему верны, но мне не помогли просто добавить состояние пользовательского интерфейса по умолчанию нажата и отпущена (например, как в a
ListView
).источник
Я использовал первый и второй ответ. Но в моем линейном макете есть изображения и текст с цветом фона, поэтому мне пришлось изменить «фон» на «передний план».
linearlayout
источник
Сначала вам понадобится селектор для определения различных состояний. Например, в файле XML:
Я не пробовал, но вы можете установить для этого селектора LinearLayout android: background и установить android: clickable на true, и он будет работать.
Если этого не произойдет, вы можете переключиться на использование RelativeLayout и сделать первый элемент кнопкой с этим селектором в качестве фона и fill_parent для ширины и высоты макета. В этом случае просто используйте обычную кнопку и установите android: background в свой селектор. Вам не нужно помещать текст на кнопку.
источник
Button
. Вы можете переопределить,onDraw(Canvas)
чтобы делать любые специальные вещи, которые вам нужны (например, рисовать изображения или текст внутри кнопки).В приложении, над которым я работаю, мне нужно динамически создать LinearLayout. В этом случае команда
работает не так, как предполагалось. Хотя я могу что-то пропустить, мне удалось использовать setOnTouchListener, чтобы получить тот же результат, и я отправляю код на случай, если у кого-то такие же потребности.
Следующий код создает LinearLayout с двумя текстовыми представлениями и скругленными углами, меняя цвет при нажатии.
Сначала создайте два XML-файла в папке с возможностью рисования, один для нормального и один для нажатого состояния linearlayout.
Нормальное состояние xml (drawable / rounded_edges_normal.xml)
Сжатое состояние xml (drawable / rounded_edges_pressed.xml). Разница только в цвете ...
Затем следующий код выполняет свою работу
Глобальная переменная:
В
onCreate()
:источник
Просто установите эти атрибуты
источник
Просто добавьте background attr / selectableItemBackground в линейный макет, а также сделайте этот linearlayout интерактивным.
пример :
Это заставляет linearlayout действовать как кнопка при ее нажатии. :)
источник
Это было полезно, но если вы хотите установить цвет фона и сделать линейный макет интерактивным, как элемент списка. Установите желаемый цвет фона и установите цвет переднего плана на? Android: attr / selectableItemBackground, установите focusable true и clickable true.
образец кода
источник
Предыдущие ответы были о том, как установить фон по умолчанию в файле xml. Вот то же самое в коде:
источник