Drawable с селектором? - PullRequest
       40

Drawable с селектором?

4 голосов
/ 12 октября 2011

в папке для рисования:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:drawable="@drawable/icon2" /> 
     <item android:drawable="@drawable/icon3" /> 
 </selector>

и макет представляет собой простую линейную компоновку, которая заполняет все пространство

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@drawable/on_touch_"
    android:weightSum="1" android:focusable="true" android:focusableInTouchMode="true">
</LinearLayout>

и когда я нажимаю это ничего не происходит

Если я добавлю, например, какой-нибудь текстовый вид и назначу android:background="@drawable/on_touch_", тогда этот текстовый вид при нажатии изменяет изображение правильно.

Где проблема с линейным макетом, почему он не меняет изображение при нажатии?

Edit: Я уверен, что мой селектируемый селектор хорош и работает, потому что я помещаю в качестве фона другие элементы, и он работает.

Но моя проблема заключается в том, как установить drawable в элемент root

Ответы [ 4 ]

6 голосов
/ 22 ноября 2011

Добавьте это к вашему макету:

 android:clickable="true"

Это установит нажатое состояние, когда вы щелкнете по нему.

0 голосов
/ 27 октября 2011

Я бы удостоверился, что у меня нет нарисованного тезки. Кажется, вы используете on_touch_.xml в качестве селектора. Возможно, есть также on_touch_.png?

Я также хотел бы убедиться, что я не устанавливаю фон снова, на что-то другое, или не делаю его недоступным для кликов в коде.

0 голосов
/ 02 ноября 2011

У меня есть селектор в корневом элементе, который работает нормально; фон переключается при нажатии. Это не корневой элемент макета действия, но это корневой элемент XML-файла.

Фону сначала назначается png:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/panel"
>
    ...

Я назначаю фон селектору только при назначении OnClickListener:

private void setClickListener(OnClickListener ocl) {

    View boxRoot = findViewById(R.id.box_root);
    if (ocl != null) {
        boxRoot.setOnClickListener(ocl);
        boxRoot.setBackgroundDrawable(getResources().getDrawable(R.drawable.panel_arrow_right_bgstate));

        setClickable(true); 
                    ...

В моем XML я использовал android:clickable="true", но затем я добавил android:focusable="true" android:focusableInTouchMode="true", чтобы соответствовать вашему случаю. Это также сработало, с переключением фона для всех моих четырех состояний.

// panel_arrow_right_bgstate.xml
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_normal"/>
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_selected"/>
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>

Если это не работает для вас, что-то еще не так с вашим кодом, где-то еще.

Когда я добавляю или удаляю рисованные объекты, Eclipse иногда становится подозрительным и смешивает их. Мои нормальные измерения:

  1. Чистый проект
  2. Обновить папку res в Eclipse
  3. Удалить gen \ com.comp.proj \ R.java
0 голосов
/ 12 октября 2011

Попробуйте

save_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">



    <item android:state_focused="true" android:state_pressed="false"
        android:drawable="@drawable/save_hover_new" />
    <item android:state_focused="true" android:state_pressed="true"
        android:drawable="@drawable/save_hover_new" />
    <item android:state_focused="false" android:state_pressed="true"
        android:drawable="@drawable/save_hover_new" />

    <item android:drawable="@drawable/save_new" />

</selector>

и задайте фон макета как селектор, например, android: background = "@ drawable / save_selector

...