Android LinearLayout с цветовым ресурсом: что я делаю неправильно?
Я выполнил этот учебник, чтобы создать список состояний цвета для определенного вида Android. Я просто хочу, чтобы он выделялся при нажатии, чтобы пользователь знал, почему экран просто изменился.
Когда визуализируется представление, я получаю следующую ошибку:
org.xmlpull.v1.XmlPullParserException: двоичная строка XML файла # 3: для тега требуется атрибут "drawable" или дочерний тег, определяющий 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>
Что я пропустил?
Ответы
Ответ 1
Я помню, что я работал над этой ошибкой, используя state drawable вместо цвета state. По какой-то причине макет фона просто не работает с цветами с сохранением состояния. Поэтому попробуйте создать готовый к выведению из состояния (например, список фигурных чертежей с разными цветами) и использовать его в качестве фона.
Рез/рисуем/pressed.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ff33ffff" />
</shape>
Рез/рисуем/normal.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ff000000" />
</shape>
Рез/рисуем/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 в качестве фона:)
Ответ 2
Вместо использования фигур в своем чертеже вы можете использовать атрибут 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"