Кнопка с другими компонентами внутри

Я хотел бы создать собственный компонент в Android Studio. Это должна быть кнопка, но с другими компонентами, такими как ImageView или ChceckBox внутри. Как это сделать?

Я уже пытался создать составной элемент управления (LinearView с компонентами внутри), но я не могу настроить onClickListener для перехвата события щелчка этого, и это не такое элегантное решение.

Я хотел бы избежать создания своего собственного компонента почти с нуля (расширить View и переопределить метод onDraw), но я не знаю, как я могу сделать это по-другому.

«Я не могу настроить onClickListener для перехвата этого события клика» — почему бы и нет? setOnClickListener() существует и работает. Вам нужно пометить контейнер как интерактивный (например, android:clickable = "true" в макете).

CommonsWare 14.05.2019 23:33
1
1
225
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать ConstraintLayout для просмотра поверх/внутри другого вида, что-то вроде этого:

?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout
  xmlns:android = "http://schemas.android.com/apk/res/android"
  xmlns:app = "http://schemas.android.com/apk/res-auto"
  xmlns:tools = "http://schemas.android.com/tools"
  android:layout_width = "match_parent"
  android:layout_height = "match_parent"
  android:orientation = "vertical">

<ImageView
    android:id = "@+id/imageView"
    android:layout_width = "0dp"
    android:layout_height = "wrap_content"
    android:layout_marginTop = "8dp"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintHorizontal_bias = "0.5"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toTopOf = "parent"
    android:scaleType = "fitXY"
    tools:srcCompat = "@tools:sample/avatars[10]" />

<CheckBox
    android:id = "@+id/textView"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_marginEnd = "8dp"
    android:layout_marginRight = "8dp"
    android:text = "check"
    app:layout_constraintBottom_toBottomOf = "@+id/imageView"
    app:layout_constraintEnd_toEndOf = "@+id/imageView"
    app:layout_constraintStart_toStartOf = "@+id/imageView"
    app:layout_constraintTop_toTopOf = "@+id/imageView" />

</android.support.constraint.ConstraintLayout>

Это будет выглядеть так:

И о ваших прослушивателях кликов - если вы хотите делать то же самое, когда щелкают любое из ваших представлений, просто добавьте прослушиватель кликов в свой родительский макет.

Если вы хотите делать разные вещи для разных кликов по представлениям с помощью ConstraintLayout, вы можете просто прикрепить прослушиватель кликов для каждого имеющегося у вас представления.

Спасибо, это то, что я хочу

Moses 29.07.2019 15:50

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