Пользовательская кнопка Android XML: не удается использовать два разных XML-файла для рисования? [Прилагаются скриншоты]

#android #xml #android-layout #drawable #android-xml

#Android #xml #android-layout #с возможностью рисования #android-xml

Вопрос:

У меня возникла странная проблема с определением двух отдельных пользовательских определений кнопок 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, который выглядит так, как я хочу, чтобы кнопки выглядели:

Графический макет, все выглядит хорошо

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

Вторая кнопка не оформлена

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

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

Комментарии:

1. что происходит, когда вы фокусируетесь или нажимаете вторую кнопку?

2. Кнопка функционирует так, как если бы она была нажата (то есть после того, как я отпущу), но при фокусировке или нажатии изображение кнопки не изменяется.

Ответ №1:

Это работает на моем компьютере.

Я взял ваш код и поместил 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
  • Проверьте ссылки на другие изображения, которые, как вы знаете, работают в других кнопках.