2013-03-08 72 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 
    } 
} 

我希望這有助於。