Как создать кнопку, которая содержит несколько видов? - PullRequest
5 голосов
/ 12 декабря 2010

На 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 ]

4 голосов
/ 12 декабря 2010

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

1 голос
/ 12 декабря 2010

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

0 голосов
/ 12 декабря 2010

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

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

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

...