2010-09-21 12 views
16

Próbuję użyć koloru zdefiniowanego w selekcji w selektorze, ale powoduje on wyjątek Resources $ NotFoundException.Czy zasób selekcjonera może używać koloru zdefiniowanego w stylu?

Najpierw dodano nowy atrybut do attr.xml:

<resources> 
    <attr name="unread_background" format="color" /> 
</resources> 

Potem tę wartość zdefiniowana w ciekawy w styles.xml:

<style name="ThemeNoTitleBar" parent="android:Theme.NoTitleBar"> 
    <item name="unread_background">#000000</item> 
</style> 

Potem próbowałem użyć tego attr w moim selektora definicja:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- other states snipped --> 
    <item android:state_selected="false" 
     android:drawable="?unread_background" /> 
</selector> 

Na koniec działanie korzysta z motywu stylu ThemeNoTitleBar w manifeście.

Próbowałem również stworzyć kolor w colors.xml i mając go użyć nowego attr, ale również nie.

Najwyraźniej czegoś brakuje, ale nie jestem pewien, co zrobić, aby to naprawić. Moim zamiarem jest stworzenie wielu motywów i wybór przez selektor koloru w aktualnie wybranym motywie.

Odpowiedz

0

Android button with different background colors Spójrz na przykład. Wygląda na to, że tego potrzebujesz.

+0

Gdybym zastąpić unread_background z zakodowane wartość koloru to działa dobrze, więc nie sądzę, że inna odpowiedź odnosi się tutaj. – toddler

+0

Czy znalazłeś odpowiedź na swoje pytanie? Mam ten sam problem. –

1
<item android:state_selected="false" 
    android:drawable="?unread_background" /> 

Powyższa sekcja jest błędna.

losowanie uwzględnia jedynie zasób losowy. Proszę zobaczyć ten link. http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

+0

Jednak zgodnie z dokumentacją (http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html#attr_android:src) atrybut src w BitmapDrawable może być atrybutem kompozycji. –

+1

Mimo to, nawet jeśli atrybut był referencyjny, a styl był rysownikiem, nadal powodowałby awarię systemu, ponieważ system Android zezwala tylko na używanie niestandardowych atrybutów (? Cokolwiek) w widokach (przynajmniej tak się domyśliłem - naprawdę chcę być jednak źle!) – HGPB

1

Oto coś, co działa przeze mnie.

attrs.xml:

<attr name="color_selection" format="reference"/> 

styles.xml, jak dziecko głównego tematu:

<item name="color_selection">@color/selection_background_inverse</item> 

shape_background_selected.xml w rozciągliwej folderu:

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="?attr/color_selection"/> 
</shape> 

plik wyboru, w moim przypadku: selector_background_recyclerview:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/shape_background_selected" android:state_activated="true" /> 
    <item android:drawable="@drawable/shape_background_selected" android:state_pressed="true" /> <!-- pressed --> 
    <item android:drawable="@color/transparent" /> <!-- default --> 
</selector> 

wreszcie w widoku za xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/selector_recyclerview_item_background"../> 
Powiązane problemy