Definiere einen benutzerdefinierten Stil (Thema) auf einer Android Switch-Komponente

Ich bin neu in Android-Entwicklung und auch auf Android-Themen / Anpassung, die ein breites Thema …

Ich versuche, meine Switch-Komponente ein besonderes Look & Feel zu geben, aber ich schaffe es nicht zu erreichen, was ich will, Avan nach dem Aussehen vieler Ressourcen im Internet.

  • Benutzerdefinierte Schrift für Webview
  • Einfügen und Entfernen von Fragmenten in Viewpager richtig
  • EglSwapBuffers ist unberechenbar / langsam
  • Wie baue ich Produkt-Aromen von Android Studio?
  • Wie stoppen Intentservice in Android?
  • Android 5.1.1 und höher - getRunningAppProcesses () gibt nur mein Anwendungspaket zurück
  • Das macht mich verrückt!
    Vielen Dank im Voraus für Ihre Hilfe, Android-Meister!

    Der Kontext

    Ich arbeite an einer bestehenden Android-Anwendung (v1), die minSdkVersion = "8" war.

    Aus diesem Grund hat die Anwendung Drittanbieter-Bibliotheken verwendet, um Actionbar ( ActionBar Sherlock ) und Switches ( SwitchCompatLibrary ) zu erhalten:

    Heute machen wir die v2-Version mit minSdkVersion = "14".

    Unser Kunde bittet uns auch, den Default Switch Look & Feel zu ändern.

    Das Ziel ist es, die Schalter zu haben:
    Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

    Das sieht wirklich wie die neuesten Materialdesign-Schalter aus, aber mit der orangefarbenen Farbe statt der "grün-blauen" Farbe, wie hier .

    Die zwänge

    Da wir jetzt minSdk 14 sind, konnten wir die 2 Bibliotheken "ActionBarSherlock" und "SwitchCompatLibrary" entfernen, aber das ist keine Option. In der Tat haben wir keine Zeit dafür …

    Tatsächlich habe ich versucht, in Abhängigkeiten in der Projektdatei des Projekts die appcompat-v7 hinzuzufügen , um die native Switch-Komponente mit Materialthema zu verwenden ( siehe hier ), aber das gibt mir Fehler wegen doppelter Attributdefinitionen mit den 2 libs erwähnt über. So kann ich es nicht benutzen, und ich bin mir nicht sicher, dass das funktionieren sollte …

    dependencies { (...) compile project(':actionbarsherlock') compile project(':switchCompatLibrary') compile files('libs/android-support-v4.jar') // incompatible avec actionbarsherlock and SwitchCompatLibrary... // compile "com.android.support:appcompat-v7:22.0.+" (...) } 

    Vorhandener Code

    Also hier ist der actuel code.

    In meiner layout.xml-Datei verwende ich den SwitchCompatLibrary-Switch:

      <de.ankri.views.Switch android:id="@+id/switchButtonNotification" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" /> 

    In meiner themes.xml Datei:

     <style name="Theme.Orange" parent="@style/Theme.Sherlock"> ... <!-- Theme switch with SwitchCompatLibrary --> <item name="switchStyle">@style/switch_light</item> <item name="textAppearance">@style/TextAppearance</item> </style> 

    Mit Styling-Informationen, die in der SwitchCompatLibrary selbst so definiert sind

    Styles.xml:

     <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="switch_light"> <item name="track">@drawable/switch_track_holo_light</item> <item name="thumb">@drawable/switch_inner_holo_light</item> <item name="textOn">@string/textOn</item> <item name="textOff">@string/textOff</item> <item name="thumbTextPadding">12dip</item> <item name="switchMinWidth">96dip</item> <item name="switchPadding">16dip</item> <item name="switchTextAppearance">@style/TextAppearance</item> </style> <style name="TextAppearance"> <item name="textColor">?android:attr/textColorPrimary</item> <item name="textColorHighlight">?android:attr/textColorHighlight</item> <item name="textColorHint">?android:attr/textColorHint</item> <item name="textColorLink">?android:attr/textColorLink</item> <item name="textSize">16sp</item> </style> </resources> 

    Switch_inner_holo_light.xml

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/switch_thumb_disabled_holo_light" /> <item android:state_pressed="true" android:drawable="@drawable/switch_thumb_pressed_holo_light" /> <item android:state_checked="true" android:drawable="@drawable/switch_thumb_activated_holo_light" /> <item android:drawable="@drawable/switch_thumb_holo_light" /> </selector> 

    Switch_track_holo_light.xml

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@drawable/switch_bg_focused_holo_light" /> <item android:drawable="@drawable/switch_bg_holo_light" /> </selector> 

    Und das Ergebnis ist:
    Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

    Was ich versucht habe

    Verwenden Sie den nativen Schalter

    Da bin ich jetzt API 14 Minimum, habe ich zuerst versucht, die "de.ankri.views.Switch" mit "android.widget.Switch" in meinem layout.xml zu ersetzen, aber das Styling wurde nicht mehr angewendet (blau aktiviert Schalter statt Oder orange) …
    Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

    Allerdings scheint die Definition direkt in jedem Schalter das Thema ( wie hier beschrieben ) scheint besser zu funktionieren, wie ich einen orangefarbenen Schalter zurück habe:

      <Switch android:id="@+id/switchButtonNotification" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:checked="true" android:thumb="@drawable/switch_inner_holo_light" android:track="@drawable/switch_track_holo_light" android:layout_alignParentRight="true" /> 

    Merkwürdig … ich weiß nicht warum, also werde ich das nicht machen und "de.ankri.views.Switch" -Komponente behalten.

    Verwenden Sie den SwitchCompatLibrary-Schalter und machen Sie mein eigenes Styling

    Dann habe ich versucht, "de.ankri.views.Switch" -Komponente zu behalten und das gleiche zu tun als SwitchCompatLibrary, aber das "@ style / switch_light" -Stil mit meinem eigenen übertreibe, mit neuen Drawables für Track und Daumen

    Themes.xml:

     <style name="Theme.Orange" parent="@style/Theme.Sherlock"> ... <!-- Theme switch with SwitchCompatLibrary --> <item name="switchStyle">@style/Switch.Orange</item> <item name="textAppearance">@style/TextAppearance</item> </style> 

    Styles.xml:

     <style name="Switch.Orange" parent="@style/switch_light"> <item name="track">@drawable/switch_track_orange</item> <item name="thumb">@drawable/switch_thumb_orange</item> <item name="textOn">@string/textOn</item> <item name="textOff">@string/textOff</item> <item name="thumbTextPadding">12dip</item> <item name="switchMinWidth">96dip</item> <item name="switchPadding">16dip</item> <item name="switchTextAppearance">@style/TextAppearance</item> </style> 

    Switch_thumb_orange.xml

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/switch_thumb_normal_orange" /> <item android:state_pressed="true" android:drawable="@drawable/switch_thumb_activated_orange" /> <item android:state_checked="true" android:drawable="@drawable/switch_thumb_activated_orange" /> <item android:drawable="@drawable/switch_thumb_normal_orange" /> </selector> 

    Switch_thumb_activated_orange.9.png Bildbeschreibung hier eingeben

    Switch_thumb_normal_orange.9.png Bildbeschreibung hier eingeben

    Switch_track_orange.xml

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/switch_track_normal_orange" /> <item android:state_checked="true" android:drawable="@drawable/switch_track_activated_orange" /> <item android:state_focused="true" android:drawable="@drawable/switch_track_activated_orange" /> <item android:drawable="@drawable/switch_track_normal_orange" /> </selector> 

    Switch_track_activated_orange.9.png Bildbeschreibung hier eingeben

    Switch_track_normal_orange.9.png Bildbeschreibung hier eingeben

    Ergebnisse :

    Und das Ergebnis ist nur AWFUL !! :
    Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

    Wo bin ich falsch Ich habe versucht, die "thumbTextPadding", "switchMinWidth" und "switchPadding" in styles.xml zu ändern, aber ohne gute Ergebnisse.

    Vielleicht sind meine 9-Patch-Dateien falsch?

  • Was ist die modale Auswahl Auswahl Modus?
  • Dalvik VM konnte nicht mehrere Methoden finden
  • Wann soll ich BroadcastReceiver abmelden? In onPause (), onDestroy () oder onStop ()?
  • Wie mache ich WRAP_CONTENT auf einem RecyclerView
  • Wie kann man lokale XML-Datei in org.ksoap2.serialization.SoapObject konvertieren?
  • Entfernen Sie das Suchsymbol aus dem Hinweistext
  • 3 Solutions collect form web for “Definiere einen benutzerdefinierten Stil (Thema) auf einer Android Switch-Komponente”

    Dieser Beitrag beschreibt, was Sie brauchen: http://www.materialdoc.com/switch/

    Wenn die Färbung nicht funktioniert (api <21), werfen Sie einen Blick auf diese Stackoverflow Post.

    Hoffe das hilft dir!

    Als ersten Schritt schlage ich vor, actionBarSherlock durch support.v7.app.ActionBar zu ersetzen. ( https://developer.android.com/reference/android/support/v7/app/ActionBar.html )

    Diese Migration braucht etwas Zeit, weil du dein bestehendes Styling neu definieren musst. In meinem Gedächtnis, wenn ich eine ähnliche Migration gemacht habe, sieht der Code von v7 Styling aus wie ActionBarSherlock Styling. Zu diesem Zeitpunkt wurde v7 ActionBar als ActionBarCompat bezeichnet.

    Du kannst das versuchen:

    • Machen Sie ein Bild für den Hintergrund Ihres Switches.
    • Das muss eine Höhe haben, die der des Kreises entspricht.
    • Und die Oberseite und die Unterseite des Bildes müssen so aussehen:

    Http://screenshot.sh/owpTUNk8jTtUl

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.