Как создать кнопку, которая содержит несколько видов?
На 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.