Как создать кнопку, которая содержит несколько видов?

На Android я хотел бы создать кнопку, которая содержит некоторые другие виды. Например, что-то вроде этого:

+---------------------------+
| Hello world!    +-------+ |
|                 | image | |
| Some more info  +-------+ |
+---------------------------+

Но я бы хотел, чтобы он был более гибким, чем этот конкретный пример. В идеале кнопка просто могла бы содержать ViewGroup, чтобы я мог реализовать ее макет в отдельном XML-файле. Однако, поскольку Button расширяет View, но не ViewGroup, это кажется невозможным.

Есть ли способ добиться этого, используя стандартные компоненты Android, или мне нужно прибегнуть к написанию пользовательского класса кнопок?


В соответствии с запросом приведен пример XML-кода, который делает свое дело:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:focusable="true"
    android:clickable="true"
    android:background="@android:drawable/btn_default">
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/primary_text_light"/>
    <TextView
        android:id="@+id/additional_line_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/primary_text_light"/>
    <TextView
        android:id="@+id/additional_line_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/primary_text_light"/>
</LinearLayout>

Я должен был установить цвет в TextViews явно, иначе они были бы почти нечитаемыми (по умолчанию они белые). Я выкопал идентификатор из SDK: .../platforms/android-7/data/res/values/public.xml, Как ни странно, primary_text_light дает черный текст, тогда как primary_text_dark результаты в белом...

3 ответа

Решение

Создайте макет нужной кнопки и установите ее android:background в @android:drawable/btn_default, Сделайте внешний вид, который содержит остальное clickable а также focusable и вы сделали.

Я не уверен, но вы пробовали ImageButton учебный класс? Я думаю, вы должны иметь возможность установить изображение на правой стороне, и вы должны иметь возможность добавить метку с новыми строками.

[обновление] Я пропустил "более гибкую" часть. Если вы хотите иметь более гибкий, я думаю, вам нужно создать собственную реализацию с собственным OnTouchListener обрабатывать все возможные состояния и обнаружение кликов.

Я бы не стал создавать класс для этого. Это просто RelativeLayout с двумя TextViewс и ImageView,

Как вы знаете, ViewGroup продолжается View и View может иметь щелчок слушателей. Так что вам нужно создать макет и установить прослушиватель кликов к нему.

Вопрос здесь в том, как вы обрабатываете состояния, вы можете попробовать использовать @android:drawable/btn_default как фон, как сказал @ognian.

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