1

У меня есть пользовательский ListView, который должен иметь селектор цветов на его фоне и текстовых элементах.Исключить раздувание при настройке селектора цвет текста в элемент CheckedTextView из пользовательского ListView в android

Пользовательский элемент моего списка:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="5dp" 
    android:paddingTop="5dp" > 

    <ImageView 
     android:id="@+id/user_image" 
     android:layout_width="30dp" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/user_name" 
     android:layout_alignTop="@+id/user_name" 
     android:scaleType="centerInside" /> 

    <CheckedTextView 
     android:id="@+id/user_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="2dp" 
     android:paddingBottom="2dp" 
     android:layout_marginLeft="5dp" 
     android:layout_toRightOf="@+id/user_image" 
     android:background="@drawable/list_item_selector_blue" 
     android:textColor="@drawable/text_color_selector" 
     android:textSize="18sp" /> 

</RelativeLayout> 

Я могу изменить фон CheckedTextView, через селектор, но когда я ставлю селектор в цвет текста, как этот android:textColor="@drawable/text_color_selector", приложение падает с следующее сообщение об ошибке:

09-02 11:36:25.918: E/AndroidRuntime(17612): FATAL EXCEPTION: main 
09-02 11:36:25.918: E/AndroidRuntime(17612): Process: a.com.a, PID: 17612 
09-02 11:36:25.918: E/AndroidRuntime(17612): android.view.InflateException: Binary XML file line #17: Error inflating class android.widget.CheckedTextView 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.LayoutInflater.createView(LayoutInflater.java:626) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at adapters.UsersListAdapter.getView(UsersListAdapter.java:44) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.AbsListView.obtainView(AbsListView.java:2713) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.ListView.measureHeightOfChildren(ListView.java:1274) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.ListView.onMeasure(ListView.java:1186) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1237) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.LinearLayout.onMeasure(LinearLayout.java:590) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:704) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:382) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2505) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.View.measure(View.java:17354) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2176) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1315) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1512) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1199) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6387) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.Choreographer.doCallbacks(Choreographer.java:603) 
09-02 11:36:25.918: E/AndroidRuntime(17612): at android.view.Choreographer.doFrame(Choreog 

Я гугл много, и найти много людей с вопросом, как это, но любой наконечник может решить мою проблему.

Это мои селекторы:

text_color_selector

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_selected="true" 
     android:drawable="@android:color/white"/> 
    <item 
     android:state_checked="true" 
     android:drawable="@android:color/white"/>  
    <item 
     android:drawable="@color/gray_text" /> 
</selector> 

list_item_selector_blue

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_selected="true" 
     android:drawable="@color/list_item_selected_blue"/> 
    <item 
     android:state_checked="true" 
     android:drawable="@color/list_item_selected_blue"/>  
    <item 
     android:drawable="@android:color/white" /> 
</selector> 
+2

Вы должны использовать ресурсы 'color' вместо drawables http://developer.android.com/guide/topics/resources/more-resources.html#Color и http://developer.android.com/guide/topics /resources/color-list-resource.html –

+0

спасибо, человек, это сработало. – androidevil

ответ

0

Атрибут TextColor может иметь только значение цвета. Поэтому вам не разрешено определять андроид: можно выделить в селекторе XML (text_color_selector.xml). Просто измените выделение на цвет, это должно решить проблему. По крайней мере, она решить мою проблему с этим изменением:

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_selected="true" 
    android:color="@android:color/white"/> 
    <item 
    android:state_checked="true" 
    android:color="@android:color/white"/>  
    <item 
    android:color="@color/gray_text" /> 
</selector> 

Я предполагаю, что цвет текста может содержать только цвет, и рисуем позволяет определить гораздо больше.