我想生成一个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等效项? - 生成按下的版本并设置为在需要时显示。
感谢。
答案 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)
将其设置为您的按钮。