Как заменить нарисованный источник элемента XML - PullRequest
2 голосов
/ 21 августа 2011

У меня есть отрисовываемый селектор (home_button.xml) для кнопки, например ...

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

И в макете моего основного вида деятельности я использую это рисование как

<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/home_button" android:text="@string/home_button"
android:background="@drawable/home_button" ></Button>

Теперь мне нужно отобразить динамические удаленные изображения вместо локальных blue_button.png и red_button.png селектора xml внутри действия на основе имени пользователя.

Как это сделать?

Ответы [ 4 ]

2 голосов
/ 21 августа 2011

На Android Кнопка класс Документация вы получаете:

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

Возможно, вы захотите заменить фон для рисования кнопки изображения на StateListDrawable, который вам понравился в этом сообщении SO , предполагая, что вы загрузили оба изображения и уже сделали их в качестве объектов для рисования

    StateListDrawable states = new StateListDrawable();
    //This for pressed true 
    states.addState(new int[] {android.R.attr.state_pressed},
        drawable_image1);
    //This for pressed false
    states.addState(new int[] { },
        drawable_image2);
    //Change it on the button
    button.setBackgroundDrawable(states);
0 голосов
/ 14 февраля 2013

Добавьте ваш стиль

<style name="MyButtonStyle" parent="android:Widget.Button">
        <item name="android:background">@drawable/btn_default</item>
 </style> 

и ваш селектор (здесь btn_default.xml)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_window_focused="false" android:state_enabled="false"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_pressed="true" 
        android:drawable="@drawable/btn_default_pressed" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/btn_default_pressed" />
    <item android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_focused="true"
        android:drawable="@drawable/btn_default_pressed" />
    <item
         android:drawable="@drawable/btn_default_normal" />
  </selector>

и ваши изображения (9 патчей) btn_default_normal и btn_default_pressed (имена могут отличаться от именэти) Затем примените стиль к вашей кнопке в XML:

<Button
      ...
      style="@style/MyButtonStyle"
   />       
0 голосов
/ 21 августа 2011

Если вы создаете еще один чертеж, просто установите новый в коде:

public void setBackgroundResource (int resid)

Кнопка является представлением, поэтому оно должно работать нормально. Подробнее .

Если вам нужно изменить «селектор», учтите, что селектор является просто StateListDrawable. и вы можете просто создать одно программное добавление состояний по мере необходимости.

0 голосов
/ 21 августа 2011

Использовать BitmapDrawable .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...