Макет Android в виде кнопки с возможностью выбора - PullRequest
14 голосов
/ 11 января 2012

Я пытаюсь создать компонент в виде кнопки с выровненным по левому краю ImageView и затем двумя TextViews справа от ImageView, расположенными один над другим и отформатированными по-разному, как в следующем примере:.

 __________________________
|                          |
| |-----|  Bold Main Text  | 
| |Image|                  |
| |-----|  Small Sub Text  |
|__________________________|

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

Я знаю, что могу использовать кнопку, устанавливая свойство drawableLeft для создания одной строки текста, связанной с изображением в виде кнопки, но, похоже, я могу использовать только один элемент текста, используя эту стратегию.

Кто-нибудь реализовывал такие компоненты пользовательского интерфейса, как это в прошлом?

Спасибо!

1 Ответ

15 голосов
/ 11 января 2012

Вы можете добавить android:duplicateParentState="true" к виджету ImageView. Также вам нужно сделать так, чтобы родительский элемент ImageView был активным и фокусируемым.

RelativeLayout в следующем коде будет действовать как Button:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout:height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true">

        <ImageView
            android:id="@+id/image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:duplicateParentState="true"
            android:src="@drawable/icon" />
        <TextView
            android:id="@+id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/image"
            android:layout_alignTop="@+id/image"
            android:layout_alignWithParentIfMissing="true"
            android:duplicateParentState="true" />
        <TextView
            android:id="@+id/text2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"            
            android:layout_toRightOf="@+id/image"
            android:layout_below="@+id/text1"
            android:layout_alignWithParentIfMissing="true"
            android:duplicateParentState="true" />
    </RelativeLayout>
</LinearLayout>
...