Java android动态生成资源

Java android动态生成资源,java,android,resources,Java,Android,Resources,我想生成一个pressend按钮设计并动态加载它 静态版本为xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- selected state --> <item android:drawable="@drawable/bt_back_pressed" a

我想生成一个pressend按钮设计并动态加载它

静态版本为xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- selected state -->
    <item android:drawable="@drawable/bt_back_pressed" android:state_pressed="true" android:state_selected="false"/>
    <item android:drawable="@drawable/bt_back_pressed" android:state_pressed="false" android:state_selected="true"/>
    <item android:drawable="@drawable/bt_back_pressed" android:state_pressed="true" android:state_selected="true"/>
    <!-- unselected state (default) -->
    <item android:drawable="@drawable/bt_back_normal"/>

</selector>
现在,当前项目从服务器端加载按钮的设计,让它成为从www.somehost.com/some/resource/bt_back_normal.png加载的bt_back_normal.png

如果我能得到一个API来生成“按下”的版本(稍微暗一点),并在需要时将其链接到事件链以显示,那就太好了

现在,当用户按下按钮时,没有视觉效果


如何在运行中生成xml等价物-生成按下的版本并设置为在需要时显示


谢谢。

不,你不能在飞行中这样做。如果您想使用动态生成的压缩绘图,您应该实现OnTouchListener,并在其中设置所需的背景。

不,您不能在运行时执行此操作。如果您想使用动态生成的按下的可绘图项,您应该实现OnTouchListener并在其中设置所需的背景。

这是一种解决方法,但您可以覆盖按钮的OnClickListener,并更改其中按钮的背景。即

final Button button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {          
        public void onClick(View v) {
            button.setBackgroundDrawable(R.drawable.button_pressed);
        }
    });
编辑:


我不知道你想改变美国;我以为你只是想证明它被压了。在这种情况下,请使用StateListDrawable:

这是一种解决方法,但您可以覆盖按钮的OnClickListener,并更改其中按钮的背景。即

final Button button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {          
        public void onClick(View v) {
            button.setBackgroundDrawable(R.drawable.button_pressed);
        }
    });
编辑:


我不知道你想改变美国;我以为你只是想证明它被压了。在这种情况下,请使用StateListDrawable:

我想您正在寻找该类。您可以在代码中创建这些,向其中添加状态(例如,您下载的按下的png文件),然后使用
按钮将其设置为您的按钮。setBackgroundDrawable(stateList)
我想您正在寻找该类。您可以在代码中创建这些,向其添加状态(例如,您下载的按下的png文件),然后使用
按钮将其设置为按钮。setBackgroundDrawable(stateList)

“R.drawable.button\u pressed”这是一个静态文件。单击后,您的代码将设置恒定的背景。根据状态(按下/释放)没有选择。“我如何动态生成xml等价物?”我介绍了静态方式,我想在动态运行时生成他的等价物,并从服务器动态加载资源,如我所述,然后尝试使用StateListDrawable:“R.drawable.button\u pressed”这是一个静态过程,您的代码将在单击后设置恒定的背景。根据状态(按下/释放)没有选择。“如何动态生成xml等价物?”我介绍了静态方式,我想在动态运行时使用服务器动态加载的资源生成他的等价物,如我所述,然后尝试使用StateListDrawable:+1,我知道这不是一种标准方式,但我想这样做,即使是丑陋的黑客方式+1,我知道这不是一个标准的方式,但我想这样做,即使是丑陋的黑客方式+1,很可能。今天需要在其他项目中工作无法测试和接受,但可能这将被接受为类名称的测试方式:它正在工作,但如果我有2个按钮,它们有“button\u general”背景,我会动态生成按下的版本,并将其放入StateListDrawable并设置为all button,如果我按下button1,它将在buttonX显示解释的结果,这是我在StateListDrawable的同一个实例中看到的最后一个按钮。StateListDrawable它是不可克隆的……是的,不幸的是,您必须为每个按钮创建一个新的StateListDrawable,否则您会看到一些奇怪的结果。我自己也遇到了这个问题+1,很可能。今天需要在其他项目中工作无法测试和接受,但可能这将被接受为类名称的测试方式:它正在工作,但如果我有2个按钮,它们有“button\u general”背景,我会动态生成按下的版本,并将其放入StateListDrawable并设置为all button,如果我按下button1,它将在buttonX显示解释的结果,这是我在StateListDrawable的同一个实例中看到的最后一个按钮。StateListDrawable它是不可克隆的……是的,不幸的是,您必须为每个按钮创建一个新的StateListDrawable,否则您会看到一些奇怪的结果。我自己也遇到了这个问题!