Android LinearLayout с цветным ресурсом: что я делаю не так? - PullRequest
34 голосов
/ 17 августа 2010

Я следовал этому руководству , чтобы создать список состояний цвета для определенного представления Android.Я просто хочу, чтобы он выделялся при нажатии, чтобы пользователь знал, почему экран просто изменился.

Когда представление отображается, я получаю следующую ошибку:

org.xmlpull.v1.XmlPullParserException: строка двоичного файла XML # 3: тег требует наличия атрибута drawable или определения дочернего тега

Мой цветовой XML (в res / color / viewcolor.xml):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#ff33ffff"/> <!-- pressed -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

Мой макет XML (в res / layout / myview.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="@color/viewcolor">
    <!--crap in the layout-->
</LinearLayout>

Что я пропустил?

Ответы [ 2 ]

52 голосов
/ 18 августа 2010

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

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 в качестве фона :)

50 голосов
/ 18 августа 2010

Вместо использования фигур в вашем чертеже, вы можете использовать атрибут 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, иначе это не будетРабота.

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

android:drawable="@color/YOUR_COLOR_HERE"
android:drawable="@drawable/YOUR_IMAGE_HERE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...