Android LinearLayout with color resource: What am I doing wrong?

I followed this tutorial to create a color state list for a particular Android view. I just want it to highlight when clicked so the user knows why the screen just changed.

When the view is rendered, I get the following error:

org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: tag requires a 'drawable' attribute or child tag defining a drawable

My color XML (in res/color/viewcolor.xml):



     
     

My layout XML (in res/layout/myview.xml):



    

What did I miss?

34
задан iandisme 17 August 2010 в 19:45
поделиться

2 ответа

Я помню, что я работал над этой ошибкой, используя возможность рисования состояния вместо цвета состояния. По какой-то причине фон макета просто не работает с цветами с сохранением состояния. Поэтому попробуйте создать объект для рисования с отслеживанием состояния (например, список фигур с разными цветами) и использовать его в качестве фона.

res / drawable / press.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
   <solid android:color="#ff33ffff" />
 </shape>

res / drawable / normal.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
   <solid android:color="#ff000000" />
 </shape>

res / drawable / background.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/pressed" />
    <item android:drawable="@drawable/normal" />
</selector>

Затем используйте background.xml drawable в качестве фона :)

52
ответ дан 27 November 2019 в 16:07
поделиться

Вместо использования фигур в drawable можно использовать атрибут android:drawable, который принимает ресурс цвета (например, @color/black).

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myview"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="top"
    android:background="@drawable/myDrawable">
    <!-- other views in layout-->
</LinearLayout>

my_drawable.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- focused -->
    <item android:state_focused="true" android:drawable="@color/YOUR_COLOR_HERE" />
    <!-- focused and pressed-->
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" />
    <!-- pressed -->
    <item android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" />
    <!-- default -->
    <item android:drawable="@color/YOUR_COLOR_HERE" /> 
</selector>

В my_drawable.xml вам нужно убедиться, что указанные вами цвета определены в res/values/colors.xml, иначе это не будет работать.

Если вы хотите использовать изображение вместо цвета, измените ресурс color на ресурс drawable. Пример:

android:drawable="@color/YOUR_COLOR_HERE"
android:drawable="@drawable/YOUR_IMAGE_HERE"
50
ответ дан 27 November 2019 в 16:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: