3

(android 2.1 或更高版本的 java/xml)

我正在使用样式创建按钮:

<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();” 方法。

有任何想法吗?:>

4

4 回答 4

0

制作另一个具有相同属性但更改'@drawable/'资源的xml。并在 onclick 方法上将按钮的背景资源设置为这个新的 xml

于 2013-03-08T12:17:23.617 回答
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 那么

取一个 TextView 代替,Button 的超类是 TextView,默认情况下 TextView 没有任何背景可绘制资源。

于 2013-03-08T12:17:30.567 回答
0
    button.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

您可以使用资源 ID 或可绘制对象

于 2013-03-08T12:19:47.910 回答
0

如果我正确理解了这个问题并且我假设您想要完全更改按钮并绘制自己的按钮,那么您将必须创建自己的按钮。这可以通过创建一个新类然后用 Button 扩展它然后覆盖 View 类的 onDraw() 方法来完成。在此方法中,您可以绘制任何您喜欢的内容,即背景、文本、边框等。

例如

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

我希望这有帮助。

于 2013-03-08T12:23:31.463 回答