我需要能够为项目中的按钮提供动态行为。到目前为止,我最接近的是使用这样的XML:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/mainmenu_button_pressed" />
<item android:state_enabled="false" android:drawable="@drawable/mainmenu_button_disabled" />
<item android:drawable="@drawable/mainmenu_button" />
</selector>
这完全是诀窍,但正如问题的主题所述,我的项目需要动态,我会解释我的意思......
此应用程序有一个介绍菜单,其中有几个选项有不同的图像。根据用户在运行时的选择(在此菜单之前),我需要能够为按钮提供不同的图像集。这样做的理想方式是:
<item android:state_pressed="true" android:drawable="%MAINMENU_BUTTON_PRESSED%" />
所以我可以设置%MAINMENU_BUTTON_PRESSED,它会使用set A(A_mainpressed.png)或B(B_mainpressed.png),而不需要额外的编码。
我知道可能正确的方法是使用OnClick功能并以编程方式执行所有操作。然而,考虑到我的项目意味着手动工作的大量,我想首先确保没有办法创建动态XML并将其提供给按钮,因此它可以像这样工作(AFAIK所有资源都被编译和因此,无法在运行时修改,资产文件夹上的XML文件将无法正常工作,因为这些文件未编译,因此不会生成我可以提供的ID。
有没有办法实现这种行为,还是应该吞下它并坚持使用OnClick方法?感谢
答案 0 :(得分:0)
我有同样的问题,通过为每个可绘制状态定义level-list来解决,例如,你的mainmenu_button_pressed.xml drawable将是
<level-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/A_mainpressed.png"
android:maxLevel="0"
android:minLevel="0" />
<item
android:drawable="@drawable/B_mainpressed.png"
android:maxLevel="1"
android:minLevel="1" />
<item
android:drawable="@drawable/C_mainpressed.png"
android:maxLevel="2"
android:minLevel="2" />
</level-list>
为您的状态drawable创建三个文件,在您的代码中根据您的配置调用方法setImageLevel。这适用于显示(用户/根)图像按钮。
答案 1 :(得分:0)
没关系,在另一个post找到答案...... **关键字是“选择器”。我在Android上几乎没有任何经验,所以我不知道如何寻找这个(一个朋友实际上暗示选择器,所以我发现了)。非常感谢你的帮助。