2013-03-08 44 views
3

(Java/XML为Android 2.1或更高版本)更新图片

我使用的样式创建按钮:

<style name="MainButton"> 
    <item name="android:textColor">#000000</item> 
    <item name="android:text">test</item> 
    <item name="android:drawableRight">@drawable/ic_launcher</item> 
    <item name="android:drawablePadding">10dip</item> 
    <item name="android:paddingLeft">10dip</item> 
</style> 

我知道,我可以改变文本(从我的java代码),例如像这样:

Button but = (Button)findViewById(R.id.button2); 
    but.setText(Html.fromHtml("<b>" + "title" + "</b>" + "<br />" + 
      "<small>" + "description" + "</small>" + "<br />" + 
      "<small>" + "DateAdded" + "</small>")); 

它看起来很好,但 我怎样才能改变从我的Java代码按钮在我的绘制对象?

我不想使用 “button.setBackgroundResource();”方法。

任何想法? :>

+0

显示方式:快速回答http://stackoverflow.com/questions/4919703/how-to-set-property-androiddrawabletop-of-a-button-at-runtime – Shade 2013-03-08 12:02:44

+0

感谢M8,但是我相信,我把我的用错误的话问。我想要改变我的drawable对象(编辑) – user2148208 2013-03-08 12:10:37

回答

0

我想你想自定义选择

创建一个自定义选择,并设置它作为XML的可绘制种源。

例子:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false" 
     android:drawable="@drawable/cell_top_selected" /> 
    <item android:drawable="@drawable/cell_top" /> 
</selector> 

使用本声明

yourbutton.setSelected(true) // for selection image 
yourbutton.setSelected(false) // for alternate image 

,如果你不希望这

I dont want to use "button.setBackgroundResource();" method. 

如果你不想使用setBackGround Resouce th恩

拿一个TextView相反,超一流的巴顿是TextView的,默认情况下的TextView没有任何背景的绘制资源。

+0

这一个正是我所期待的。 <项目的android:state_selected = “真” 机器人:可绘制= “@绘制/ cell_top_selected”/> (启用除外), 和它完美的作品! 非常感谢。 – user2148208 2013-03-08 13:34:33

0

使具有相同属性的变化,但“@绘制/”资源另一个XML。和的onclick方法设置按钮的背景资源,这种新的XML

0
button.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); 

您可以使用的资源ID或可绘制

0

如果我理解正确的问题,我假设你想彻底改变按钮,绘制自己的,那么你必须创建自己的按钮。这可以通过创建一个新类,然后使用Button对其进行扩展,然后重写View类的onDraw()方法来完成。在这个方法中,你可以绘制你喜欢的任何东西,即背景,文本,边界..等等。

例如

class NewButton extends Button{ 
    protected void onDraw (Canvas canvas){ 
    //Draw here 
    } 
} 

我希望这有助于。