#android #user-interface #colors #formatting
#Android #пользовательский интерфейс #Цвет #форматирование
Вопрос:
Я пытаюсь использовать ColorStateList для раскрашивания элементов в моем RecyclerView. Вот xml для моего ViewHolder:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/view_colors"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8sp"
android:id="@ id/entry_image"
android:layout_gravity="center_horizontal"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8sp"
android:id="@ id/entry_text"
android:textStyle="bold"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
И вот мой view_colors.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="@color/colorPrimary"/>
<item android:state_focused="true" android:drawable="@color/colorAccent"/>
<item android:drawable="@color/colorPrimaryDark"/>
</selector>
Когда я использовал ColorStateList в res / colors и применил его к тегу textColor, он работал нормально. Я попробовал то же самое с тегом background и получил эту ошибку. Итак, я рассмотрел здесь другие вопросы, а затем попытался использовать xml в res / drawable, который определял drawables вместо цветов (как показано выше), но это не решило проблему.
РЕДАКТИРОВАТЬ: это отлично работает на моем телефоне с 27-м уровнем API, но ошибка появляется на моем телефоне 23-го уровня API.
Вот полная трассировка стека: 2019-04-12 13:47:39.419 22410-22410/com.example.realrecyclerview E/linker: ошибка readlink(«): нет такого файла или каталога [fd=31] 2019-04-12 13:47:39.419 22410-22410/ com.example.realrecyclerview E/ компоновщик: предупреждение: невозможночтобы получить реальный путь к библиотеке «/data/app/com.example.realrecyclerview-1/oat/arm/base.odex». Будет использоваться указанное имя. 2019-04-12 13:47:41.305 22410-22410/com.example.realrecyclerview E/компоновщик: ошибка чтения ссылки («): нет такого файла или каталога [fd=38] 2019-04-12 13:47:41.305 22410-22410/ com.example.realrecyclerview E/ компоновщик: предупреждение: невозможно получить реальный путь для библиотеки «/system/lib/hw/gralloc.sc8830.so». Будет использоваться указанное имя. 2019-04-12 13:47:41.420 22410-22410/com.example.realrecyclerview E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.realrecyclerview, PID: 22410 android.view.Исключение InflateException: строка двоичного файла XML # 2: строка двоичного файла XML # 2: ошибка раздувания класса в android.view.LayoutInflater.inflate(LayoutInflater.java: 539) в android.view.LayoutInflater.inflate(LayoutInflater.java:423) в com.example.realrecyclerview.HarvestAdapter.onCreateViewHolder(HarvestAdapter.java:48) на com.пример.realrecyclerview.HarvestAdapter.onCreateViewHolder(HarvestAdapter.java: 14) в android.support.v7.widget.RecyclerView $Adapter.createViewHolder(RecyclerView.java:6794) в android.support.v7.widget.RecyclerView $Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975) в android.support.v7.widget.RecyclerView $Recycler.getViewForPosition(RecyclerView.java: 5858) в android.support.v7.widget.RecyclerView $Recycler.getViewForPosition(RecyclerView.java: 5854) в android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230) в android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java: 557) в android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517) в android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java: 612) в android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java: 171) в android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924) на Android.поддержка.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641) в android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java: 4194) в android.view.View.layout(View.java: 16645) в android.view.ViewGroup.макет (ViewGroup.java: 5471) в android.widget.LinearLayout.setChildFrame(LinearLayout.java: 1743) в android.widget.LinearLayout.Горизонтальный макет (LinearLayout.java: 1732) в android.widget.LinearLayout.onLayout(LinearLayout.java: 1497) в android.view.View.layout(View.java: 16645) в android.view.ViewGroup.макет (ViewGroup.java: 5471) в android.widget.FrameLayout.layoutChildren(FrameLayout.java: 336) в android.widget.FrameLayout.onLayout(FrameLayout.java: 273) в android.view.View.layout(View.java: 16645) в android.view.ViewGroup.макет (ViewGroup.java: 5471) в android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java: 444) в android.view.View.layout(View.java: 16645) в android.view.ViewGroup.макет (ViewGroup.java: 5471) в android.widget.FrameLayout.layoutChildren(FrameLayout.java: 336) на Android.виджет.FrameLayout.onLayout(FrameLayout.java: 273) в android.view.View.layout(View.java: 16645) в android.view.ViewGroup.макет (ViewGroup.java: 5471) в android.widget.LinearLayout.setChildFrame(LinearLayout.java: 1743) в android.widget.LinearLayout.layoutVertical(LinearLayout.java: 1586) в android.widget.LinearLayout.onLayout(LinearLayout.java: 1495) в android.view.View.layout(View.java: 16645) в android.view.ViewGroup.макет (ViewGroup.java: 5471) в android.widget.FrameLayout.layoutChildren(FrameLayout.java: 336) в android.widget.FrameLayout.onLayout(FrameLayout.java:273) в com.android.internal.policy.PhoneWindow $DecorView.onLayout(PhoneWindow.java: 2694) в android.view.View.layout(View.java: 16645) в android.view.ViewGroup.макет (ViewGroup.java: 5471) на android.view.ViewRootImpl.performLayout(ViewRootImpl.java: 2171) на android.view.ViewRootImpl.performTraversals(ViewRootImpl.java: 1931) на android.view.ViewRootImpl.doTraversal(ViewRootImpl.java: 1107) на android.view. ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java: 6013) на Android.Вид.Хореограф $ CallbackRecord.run(хореограф.java: 858) в android.view.Хореограф.Обратные вызовы (Choreographer.java: 670) в android.view.Хореограф.doFrame(Choreographer.java: 606) в android.view.Хореограф $FrameDisplayEventReceiver.run(хореограф.java: 844) на android.os.Handler.handleCallback(Handler.java:739) на android.os.Handler.DispatchMessage(Handler.java:95) на android.os.Looper.loop(Looper.java: 148) на android.app.ActivityThread.main(Acti
Ответ №1:
Проблема заключалась в записи в селекторе, с которой не было связано состояние. Я удалил следующую строку, и она отлично работает на всех моих устройствах:
<item android:drawable="@color/colorPrimaryDark"/>
Ответ №2:
Исключение во время выполнения обычно содержит ошибку в макете или XML-файле. Пожалуйста, предоставьте полную трассировку исключения LogCat.
Кроме этого, вы упомянули, что вам нужен ColorStateList, но вы используете drawable. Не использовал цвета в рисованном селекторе. Если все, что вам нужно, это обычный цвет, попробуйте вместо этого выбрать цвет. Тот же XML-файл, просто переместите его в папку «color» Res и обменяйте android: drawable на android: color
Комментарии:
1. Как я уже сказал в описании, это приводит к той же ошибке. Я обновлю описание с полной трассировкой исключения LogCat.