Android动态drawable行为按钮

时间:2012-10-05 14:25:37

标签: android xml button dynamic

我需要能够为项目中的按钮提供动态行为。到目前为止,我最接近的是使用这样的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方法?感谢

2 个答案:

答案 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上几乎没有任何经验,所以我不知道如何寻找这个(一个朋友实际上暗示选择器,所以我发现了)。非常感谢你的帮助。