0

我需要能够为我的项目中的按钮提供动态行为。到目前为止,我得到的最接近的是使用这样的 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 并且它会使用集合 A (A_mainpressed.png) 或 B (B_mainpressed.png) 而不需要额外的编码。

我知道执行此操作的可能正确方法是使用 OnClick 函数并以编程方式执行所有操作。然而,考虑到对我的项目意味着大量的手动工作,我想首先确保确实没有办法创建动态 XML 并将其提供给按钮,因此它可以像那样工作(AFAIK 所有资源都已编译和因此不能在运行时修改,资产文件夹上的 XML 文件也不起作用,因为这些文件没有被编译,因此不会生成我可以提供的 ID)。

有什么方法可以实现这种行为,还是我应该吞下它并坚持使用 OnClick 方法?谢谢

4

2 回答 2

0

没关系,在另一篇文章中找到了答案... ** 关键字是“选择器”。我几乎没有任何关于 Android 的经验,所以我不完全知道如何寻找这个(一个朋友实际上暗示了选择器,所以我发现了)。无论如何,感谢您的帮助。

于 2012-10-22T13:01:58.617 回答
0

我有同样的问题,通过为每个可绘制状态定义级别列表来解决,例如,您的 mainmenu_button_pressed.xml 可绘制将是

<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>

像这样为您的状态可绘制创建三个文件,在您的代码中只需根据您的配置调用方法 setImageLevel 。这对于显示(用户/根)图像按钮效果很好。

于 2012-10-05T14:35:54.020 回答