2012-06-12 13 views
33

Ich möchte eine einfache Sache tun: Definieren Sie eine Zeichnungsdatei, die genau die gleiche Hintergrundfarbe wie Systemstatus-gepresste Hintergrundfarbe hat. Ich mache es wie dies in res/Drawables/my_drawable.xml:Wie referenziere ich das Farbattribut?

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

ich immer bekommen:

java.lang.UnsupportedOperationException: Cant convert to color: type=0x2 

Irgendwelche Hinweise?

Grüße

Antwort

43

Sie könnten die folgenden beheben Ihr Problem zu tun:

1) definieren 2 Farben für jedes Thema in Ihren Farben-Datei:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="my_color_dark">#ff33B5E5</color> 
    <color name="my_color_light">#ff355689</color> 
</resources> 

2) Datei erstellen res/values ​​/ attrs.xml mit Inhalt:

3) Angenommen, Sie haben 2 emes in Ihrem styles.xml (Theme.dark und Theme.light) definieren:

<style name="Theme.dark" parent="@style/Theme.Sherlock"> 
    <item name="my_color">@color/my_color_dark</item> 
</style> 

<style name="Theme.light" parent="@style/Theme.Sherlock.Light"> 
    <item name="my_color">@color/my_color_light</item> 
</style> 

4) Verwenden Sie die Farbe in einem ziehbar:

<color android:color="?attr/my_color"/> 

Hoffnung sollte dies Ihr Problem beheben.

+7

Aus irgendeinem Grund bekomme ich einen Fehler mit diesem Ansatz:' android.view.InflateException: Binär XML Datei Zeile # 2: Fehler beim Aufblasen der Klasse ' – Muxa

+2

Ich bekomme den gleichen Fehler, wenn ich diesen Ansatz versuche. Es funktioniert für Android: Farbe in Layout-XMLs, aber nicht in Zeichen-XMLs. Eine langwierige Problemumgehung: final TypedValue typedValue = new TypedValue(); getTheme(). ResolveAttribute (R.attr.tx_frq, typedValue, true); FARBE = typedValue.data; Drawable d = getResources(). GetDrawable (R.drawable.mydrawable); d.setColorFilter (FARBE, PorterDuff.Mode.MULTIPLY); – Larphoid

+2

Diese Lösung funktioniert nur mit API 11+. Für API 10 und niedriger können Sie nicht auf ein Attribut in einer Drawable XML-Datei verweisen. – BladeCoder

7

einfach eine neue color.xml Datei in /res/values/color.xml erstellen und Code wie in es folgende setzen:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <color name="editcolor">#ff99ffff</color> 
    <color name="transparent">#00000000 </color> 

</resources> 
+1

Nein, weil ich möchte Thema ändern, oder jemand anderes Thema am Telefon wählen werde ich immer noch mit festen Werten bleiben. – Michal

3

Sie versuchen, ein Attribut in eine Farbe zu konvertieren. Attribute sind Eigenschaften, die normalerweise an eine Ansicht angehängt sind, die dann mithilfe eines Themas formatiert werden kann.

Sie müssen auf eine Farbressource in Ihrem XML-Code verweisen. Sie können dies tun, indem Sie Ihre eigene Ressource zu erstellen:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="colorPressedHighlight">#FF8800</color> 
</resources> 

Dann ist es wie diese Referenz:

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

Oder Sie eine Farbe in der Android zur Verfügung stehenden Ressourcen verweisen können:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_selected="true"> 
     <color android:color="@android:color/holo_orange_light"/> 
    </item> 
    <item android:state_selected="false"> 
     <color android:color="@android:color/holo_blue_dark"/> 
    </item> 
</selector> 
+0

Ok, ich habe deinen Standpunkt verstanden. Vielleicht verwende ich eine falsche Idee. Lassen Sie mich Ihnen sagen, was ich erreichen möchte.Ich habe einige benutzerdefinierte Ansicht und ich möchte es ausgewählten State-Hintergrundfarbe genau die gleiche wie tatsächliche Thema gedrückt Zustand Farbe setzen. Ich denke, ich werde das nicht mit '@android: color/...' erreichen. – Michal

+0

Verwenden Sie offizielle Android-Designs? dann können Sie eine Verknüpfung zu der Farbe herstellen oder einfach die Zeichen aus dem SDK in $ ANDROID_SDK $/platforms/android-14/data/res holen. – XGouchet

+0

Ja, ich stimme zu, aber wenn ich das Ändern des Designs in meiner App zulassen möchte, muss ich die Farbänderung des benutzerdefinierten Zeichensatzes selbständig durchführen. Ich dachte, ich könnte das irgendwie automatisch machen - indem ich seine Hintergrundfarbe mit Attr-Wert festhalte. – Michal

0

try Auf diese Weise Farbe in android: ziehbar wie unten

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="?android:attr/colorPressedHighlight"/> <!-- pressed --> 
    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused --> 
    <item android:drawable="@color/section_list_background"/> <!-- default --> 
</selector> 

oder

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:color="?android:attr/colorPressedHighlight"/> 
    <item android:state_enabled="false" android:color="@color/section_list_background" /> 
    <item android:color="@color/testcolor5"/> 
</selector> 
+0

http://developer.android.com/guide/topics/resources/drawable-resource.html –

+0

Haben Sie das überprüft? Ich habe Fehler beim Versuch zu verwenden: '' – Michal

+0

Ich möchte nur sagen, dass verwenden Sie Ihren Zustand, wenn Sie "Artikel Android: state_selected "aber benutze das android: drawbar als Attribut, um die Farbe zu setzen ...... –

4

Sie können ?attr nicht in Xml-Zeichen-Ressourcen verwenden, da die in der Kompilierzeit von aapt erstellten Zeichenressourcen erstellt werden können. Attr-Ressourcen für die dynamische Verbindung in Laufzeit

Verwandte Themen