1

我在定义两个单独的自定义 XML 按钮定义时遇到了一个奇怪的问题。我创建了一个测试项目只是为了复制错误,所以我将添加问题的完整代码和屏幕截图。基本上,我想使用 9-patch 图像来定义可以重用的自定义 XML 按钮配置。

我定义了两个 XML 文件:

z_btn_xml_glossy_blue_lightblue.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_focused="true"
        android:drawable="@drawable/z_btn_glossy_lightblue" >
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </item>

    <item
        android:state_pressed="true"
        android:drawable="@drawable/z_btn_glossy_lightblue" >
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />        
    </item>

    <item
        android:drawable="@drawable/z_btn_glossy_blue" >
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />        
    </item>
</selector>

z_btn_xml_glossy_black_white.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_focused="true"
        android:drawable="@drawable/z_btn_glossy_white" >
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </item>

    <item
        android:state_pressed="true"
        android:drawable="@drawable/z_btn_glossy_white" >
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />        
    </item>

    <item
        android:drawable="@drawable/z_btn_glossy_black" >
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />        
    </item>
</selector>

如您所见,这两个文件本质上完全相同,但使用了不同的可绘制对象。我的 main.xml 布局文件是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="5dip"
    android:paddingRight="5dip"
    android:paddingTop="0dip"
    android:paddingBottom="3dip" >
    <Button
        android:id="@+id/BTNHostWaitingStartGame"
        android:background="@drawable/z_btn_xml_glossy_blue_lightblue"
        android:textColor="#FFFFFF"
        android:textSize="18sp"
        android:layout_marginRight="2dip"
        android:layout_width="wrap_content"
        android:layout_height="45dip"
        android:layout_weight="1.0"
        android:text="Start Game" />
    <Button
        android:id="@+id/BTNHostWaitingCancelGame"
        android:background="@drawable/z_btn_xml_glossy_black_white"
        android:textColor="#FFFFFF"
        android:textSize="18sp"
        android:layout_marginLeft="2dip"
        android:layout_width="wrap_content"
        android:layout_height="45dip"
        android:layout_weight="1.0"
        android:text="Cancel Game" />
</LinearLayout>

非常简单,它只创建了两个按钮。我不会发布测试活动文件,因为它所做的只是将布局设置为 R.layout.main。

这是 Eclipse 中图形布局的屏幕截图,它看起来像我希望按钮的样子:

图形布局,一切看起来都不错

但是,在模拟器上,它如下所示:

第二个按钮没有样式

如您所见,第二个按钮未设置样式。谁能解释这是为什么?在设备上也是如此。这里有一些我不知道或没有看到的限制吗?

谢谢您的帮助!

4

1 回答 1

2

它适用于我的机器。

我拿走了你的代码并将选择器 xml 放在 res/drawable 中。假设items 中的可绘制引用是图像(例如z_btn_glossy_lightblue引用 res/drawable-hdpi/z_btn_glossy_lightblue.png),我将这些引用交换为我自己的一些图像。奇迹般有效。

尝试:

  • 确保您已将 xml 放在正确的文件夹中,并确保这些文件的副本没有错误地放置在另一个文件夹中。
  • 确保您在项目中引用的可绘制对象没有任何同名,例如 res/drawable/z_btn_glossy_lightblue。xml
  • 参考您知道在其他按钮中工作的其他图像进行测试。
于 2011-05-25T10:04:03.870 回答