несколько элементов управления в одном с рисованным фоном (градиент) - PullRequest
0 голосов
/ 10 января 2011

Привет, я пытаюсь сделать следующее:

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

Вот что я попробовал: В файле макета для элемента управления я добавил кнопку

<Button android:id="@+id/btnCustomButton" android:layout_width="214dp" android:drawable="@drawable/custom_button" android:background="@drawable/custom_button_background" android:gravity="center_horizontal" android:layout_height="39dp" />

в custom_button.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:height="33dp" android:width="214dp">
   <ImageView
  android:gravity="left|center_horizontal" android:id="@+id/btn_icon" android:layout_width="fill_parent"  android:layout_height="27dp" />

   <TextView android:id="@+id/txtLabel" android:textSize="15px" android:textColor="@color/main_text_black" android:text="Search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:singleLine="true" />
</shape

в custom_button_background.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="15dp" android:state_pressed="true">
            <shape android:shape="rectangle">
              <gradient android:startColor="@color/gradient_hl_top" android:endColor="@color/gradient_hl_bottom" android:angle="270" />
            <stroke android:width="3dp" android:color="@color/main_text_black" />
            <corners android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
            </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle">
              <gradient android:startColor="@color/gradient_hl_top" android:endColor="@color/gradient_hl_bottom" android:angle="270" />
            <stroke android:width="3dp" android:color="@color/main_text_black" />
            <corners android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
            </shape>
    </item>
    <item>        
        <shape android:shape="rectangle">
              <gradient android:startColor="@color/_gradient_top" android:endColor="@color/gradient_bottom" android:angle="270" />
            <stroke android:width="3dp" android:color="@color/main_text_black" />
            <corners android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
            </shape>
    </item>
</selector>

Я не вижу TextView, печатающий «Поиск», но вижу работающий градиент. Что я делаю не так?

1 Ответ

0 голосов
/ 16 января 2011

Вот как я это сделал:

  1. Я создал пользовательский элемент управления с относительным макетом, установил фон макета для селектора custom_button_background.xml

  2. Добавлены ImageView и TextView внутри XML-файла относительного макета пользовательского элемента управления

  3. Добавлен прослушиватель при нажатии элемента управления

Проблема заключалась в том, что я не смог увидеть выделение, потому что щелчок не был обработан.

Единственная проблема, с которой я столкнулся сейчас, это то, что ImageView имеет свое собственное состояние выделения (другое изображение) и тоже нуждается в селекторе.Когда я добавляю селектор к нему, я не вижу ничего изменения в ImageView при нажатии.Как только я выясню проблему, я добавлю остальное.

...