Пользовательская кнопка Android XML: нельзя использовать два разных XML-файла? [Скриншоты включены] - PullRequest
1 голос
/ 13 апреля 2011

У меня странная проблема с определением двух отдельных пользовательских определений кнопок XML. Я создал тестовый проект исключительно для воспроизведения ошибки, поэтому буду добавлять полный код и снимки экрана с этой проблемой. По сути, я хотел бы использовать изображения с 9 патчами для определения пользовательских конфигураций кнопок 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, который выглядит так, как я хочу, чтобы кнопки выглядели так:

Graphical Layout, everything looks good

Однако на эмуляторе это выглядит следующим образом:

The second button is not styled

Как видите, вторая кнопка не имеет стиля. Кто-нибудь может пролить свет на то, почему это так? То же самое относится и к устройствам. Есть ли здесь какое-то ограничение, о котором я просто не знаю или не вижу?

Спасибо за помощь!

1 Ответ

2 голосов
/ 25 мая 2011

Это работает на моей машине.

Я взял ваш код и поместил XML селектора в res / drawable.Предполагая, что ссылки для рисования в item s являются изображениями (например, z_btn_glossy_lightblue ссылается на res / drawable-hdpi / z_btn_glossy_lightblue.png), я обменял эти ссылки на некоторые мои собственные изображения.Работает как шарм.

Попробуйте:

  • Убедитесь, что вы поместили ваши XML-файлы в нужную папку, и убедитесь, что нет копий этих файлов, ошибочно помещенных в другую папку.
  • Убедитесь, что в ваших чертежах, на которые вы ссылаетесь в предметах, нет тезок, например, res / drawable / z_btn_glossy_lightblue. xml
  • Проверьте ссылки на другие изображения, которые, как вы знаете, работают на других кнопках.
...