如何替换xml项的可绘制源

时间:2011-08-21 06:28:46

标签: android android-layout

我有一个按钮的drawable选择器(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>

在我的主要活动的布局中,我使用这个drawable作为

<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>

现在我需要根据用户登录信息在活动内部显示动态远程图像来代替选择器xml的本地blue_button.png和red_button.png。

怎么做?

4 个答案:

答案 0 :(得分:2)

在您获得的Android Button课程文档中:

  

如果您对默认按钮样式不满意并且想要   定制它以匹配您的应用程序的设计,然后您可以   用状态列表drawable替换按钮的背景图像。

您可能希望使用此SO帖子中的StateListDrawable替换图像按钮背景drawable,假设您已下载两个图像并将它们作为可绘制对象已经

    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);

答案 1 :(得分:0)

使用BitmapDrawable

答案 2 :(得分:0)

如果您创建另一个drawable,只需在代码中设置一个新的:

public void setBackgroundResource (int resid)

按钮是一个视图,所以这应该工作正常。 More info

如果您需要更改“选择器”,请考虑选择器只是一个 StateListDrawable.所以你可以创建一个程序,根据需要自然添加状态。

答案 3 :(得分:0)

添加你的风格

<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"
   />