【问题标题】:Update picture inside of the button (xml) from java code [duplicate]从java代码更新按钮(xml)内的图片[重复]
【发布时间】:2013-02-23 23:19:19
【问题描述】:

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

有什么想法吗? :>

【问题讨论】:

标签: java android xml button drawable


【解决方案1】:

我想你想要一个自定义选择器

创建一个自定义选择器并将其设置为 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默认没有任何背景可绘制资源。

【讨论】:

  • 这正是我想要的。 (启用除外),它完美地工作!非常感谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
        button.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);
    

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

    【讨论】:

      【解决方案4】:

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

      例如

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

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多