android动态生成资源

时间:2013-05-13 13:07:12

标签: 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" 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>

位于/ res / drawable文件夹中。当我想使用它时只需要一行代码:

android:background="@drawable/bt_back"

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

如果我可以获得一个API来生成“压缩”版本(更暗),并将其链接到事件链以在需要时显示,那将是很好的。

当用户按下按钮时,目前没有视觉效果。

如何动态生成xml等效项? - 生成按下的版本并设置为在需要时显示。

感谢。

3 个答案:

答案 0 :(得分:1)

不,你不能动态地做到这一点。如果你想使用动态生成的按下drawable,你应该实现OnTouchListener并在其中设置所需的背景。

答案 1 :(得分:1)

这是一种解决方法,但您可以覆盖按钮的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:http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html

答案 2 :(得分:1)

我认为你正在寻找StateListDrawable课程。您可以在代码中创建这些内容,向其中添加状态(例如,您下载的按下的png文件),然后使用button.setBackgroundDrawable(stateList)将其设置为您的按钮。