0

我想生成一个 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 等效项?- 生成按下版本并设置为在需要时显示。

谢谢。

4

3 回答 3

1

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

于 2013-05-13T13:13:21.790 回答
1

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

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

于 2013-05-13T13:13:36.673 回答
1

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

于 2013-05-13T13:32:56.123 回答