2013-09-06 3 views
6

Ich habe Probleme beim Anpassen des Aussehens eines Android Switch-Widget. Ich habe benutzerdefinierte XML-Zeichen, die ich für den Daumen (den kleinen Button-Teil, der normalerweise "Ein" oder "Aus" sagt) und den Track (den Hintergrund, über den der Daumen gleitet) verwenden möchte. Wenn ich nur den Daumen mit Android: Daumen, funktioniert es gut. Wenn ich die Spur einstelle (egal ob der Daumen eingestellt ist oder nicht), verschwindet der Schalter vollständig und es bleibt nur noch der Text übrig.Android Switch Widget: Einstellung Android: Track Ursachen Daumen und Track nicht angezeigt

Hier ist mein Code, wenn nur der Daumen angelegt wird:

<com.blahblahblah.blah.CustomSwitch 
    android:id="@+id/switch_1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOff="Off" 
    android:textOn="On" 
    android:text="Something Awesome" 
    android:textColor="@android:color/black" 
    android:thumb="@drawable/custom_switch_thumb" /> 

Hier ist, wie es im Vorschaufenster aussieht:

enter image description here

Und mit der angelegten Spur:

<com.blahblahblah.blah.CustomSwitch 
    android:id="@+id/switch_1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOff="Off" 
    android:textOn="On" 
    android:text="Something Awesome" 
    android:textColor="@android:color/black" 
    android:track="@color/track_color" /> 

Vorschaufenster mit Track angewendet:

enter image description here

Als Referenz Ich bin mit Android Studio 0.2.3 auf OSX 10.7.5.

Antwort

20

Ich stolperte gerade über das gleiche Problem und fand eine Lösung durch die HoloEverywhere issue tracker. Sie müssen die <size> der ziehbaren XML-Form festlegen, die Sie verwenden.

Problem (das Widget gibt es und ich kann mit ihr zu interagieren, aber ich kann es nicht sehen, es ist versteckt):

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="@color/black_50" /> 
</shape> 

Arbeiten (nicht hinzugefügt <size>):

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="@color/black_50" /> 
    <size android:width="56dp" android:height="20dp" /> 
</shape> 
+0

Ich musste nur eine Höhe hinzufügen, um es zu beheben. z.B. RobB

0

Im Allgemeinen nur für das Ändern eines Bildes müssen Sie kein Steuerelement Unterklasse, Sie können es z. mit dem Stilattribut.

Über Ihr Problem gibt es mehrere Steuerelemente, die eine Zeichnungsfarbe und keine einfache Farbe erwarten. In der Kontrolldefinition (dem xml-Teil) können Sie einfach definieren, dass Sie eine Referenz zulassen, aber Sie können sie nicht auf ziehbare Referenzen beschränken. Vermeiden Sie also, Farben direkt zu verwenden. Wenn Sie kein Bild hinzufügen möchten, können Sie es auch mit XML definieren, aber beachten Sie, dass dies nicht immer funktioniert.

+0

Danke für die Antwort. Ich weiß, dass ich das Steuerelement nicht unterklassifizieren muss, aber ich mache das auf der ganzen Linie für diese spezielle Anwendung. Es sollte nichts beeinflussen, besonders nicht an dieser Stelle, weil meine Unterklassen nur Konstruktoren überschrieben haben, die nur super (...) aufrufen und nichts anderes tun. Ich habe versucht, ein Zeichen und nur eine Farbe. Ich habe noch einen Fall gefunden, in dem eine Farbe * nicht * funktioniert, wenn ein Zeichen bevorzugt wird. In allen anderen Fällen hat es immer funktioniert. In diesem speziellen Fall, mit einem Zeichen oder einer Farbe, funktioniert keiner. Es funktioniert gut für den Daumen, aber nicht für den Track. –