2016-08-29 10 views
15

niestandardowej przełącznik kształt wygląda tak:klienta Switch - tor i wielkość selektor nie działa poniżej 21 API

Przede API 21

enter image description here

Poniżej API 21

enter image description here

Wydaje się, że blok <size/> nie działa w <shape/> dla API 21 pre.

Wszelkie pomysły, jak rozwiązać ten problem?


KOD

container.xml:

<Switch 
     android:id="@id/switch_follow" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:textOff="" 
     android:textOn="" 
     android:thumb="@drawable/switch_selector" 
     android:track="@drawable/switch_track"/> 

odkształcalne/switch_selector.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <layer-list> 
     <item 
      android:bottom="@dimen/switch_selector_padding" 
      android:left="@dimen/switch_selector_padding" 
      android:right="@dimen/switch_selector_padding" 
      android:top="@dimen/switch_selector_padding"> 
      <shape 
       android:dither="true" 
       android:shape="oval" 
       android:useLevel="false" 
       android:visible="true"> 
       <gradient 
        android:angle="270" 
        android:endColor="@color/primary_white" 
        android:startColor="@color/primary_white"/> 
       <corners 
        android:radius="@dimen/switch_radius"/> 
       <size 
        android:width="@dimen/switch_track_height" 
        android:height="@dimen/switch_track_height" /> 
      </shape> 
     </item> 

    </layer-list> 
</item> 
</selector> 

odkształcalne/switch_track.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:dither="true" 
android:shape="rectangle" 
android:useLevel="false" 
android:visible="true"> 
<gradient 
    android:angle="270" 
    android:endColor="@color/primary_yellow_dark_v2" 
    android:startColor="@color/primary_yellow_dark_v2"/> 
<corners android:radius="@dimen/switch_radius" /> 
<stroke 
    android:width="@dimen/switch_stroke_height" 
    android:color="@android:color/transparent"> 
</stroke> 
<size 
    android:width="@dimen/switch_track_width" 
    android:height="@dimen/switch_track_height" /> 
</shape> 

Być może ktoś borykał się z podobnym problemem. Podziel się wrażeniami.


EDIT: dodano dimens wykorzystywane

<dimen name="switch_track_width">36dp</dimen> 
<dimen name="switch_track_height">30dp</dimen> 
<dimen name="switch_radius">50dp</dimen> 
<dimen name="switch_selector_padding">2dp</dimen> 
<dimen name="switch_stroke_height">0dp</dimen> 
+0

proszę umieszczać @ Dimen/switch_track_width i wysokość rozmiarach . – Warpzit

+0

@Warpzit, sprawdź moją edycję – AnZ

+0

Myślę (ale nie jestem pewien), że tag XML jest tutaj nieprawidłowy. Z wyjątkiem sytuacji, gdy jest to spowodowane błędem składni xml (co wydaje się nie być, szczególnie jeśli działało w poprzednich wersjach, ale nie jest niemożliwe ...) xml okazuje się być formatem użytkownika dla plików danych tak samo jak zwykły tekst lub ".ini" jest format użyty w zbyt wielu pytaniach, nie mając w rzeczywistości nic z tym wspólnego. – bitifet

Odpowiedz

7

Wszystko jest ok z tagiem <size />. Numer Drawable został utworzony i zastosowany poprawnie. Twój problem leży całkowicie w zakresie Switch.

W starszych wersjach przed Lollipop kciuk był używany z tekstem, a losowanie było niczym więcej niż obrazem tła, który został skalowany do wymaganego rozmiaru. Możesz to sprawdzić, dodając tekst do atrybutów textOff i textOn. Dodatkowo zdefiniowano minimalną szerokość.

Więc po prostu dodać switchMinWidth 0 i thumbTextPadding od połowy średnicy kciuka

<Switch 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:switchMinWidth="0dp" 
    android:textOff="" 
    android:textOn="" 
    android:thumb="@drawable/switch_selector" 
    android:thumbTextPadding="@dimen/switch_thumb_radius" 
    android:track="@drawable/switch_track" /> 

i poprawnej definicji promienia dla niego

<dimen name="switch_track_height">30dp</dimen> 
<dimen name="switch_thumb_radius">15dp</dimen> 
+0

świetne wyjaśnienie, dzięki! Wygląda na to, że rozwiązał mój problem – AnZ

1

mam skopiowany kod i starają się realizować w moim komputerze, pierwszą rzeczą w swojej rozciągliwej/switch_selector.xml wewnątrz <size> własności szerokość powinna mieć switch_track_width zamiast switch_track_height:

<size 
    android:width="@dimen/switch_track_width" 
    android:height="@dimen/switch_track_height" /> 

Chociaż rozwiąże twój problem, ale chciałbym Proponuję jeszcze jeden plik dimens.xml wewnątrz katalogu res/wartości-V21 i dodać

<dimen name="switch_track_width">30dp</dimen> //change as per your view appreance 
<dimen name="switch_track_height">25dp</dimen> //change as per your view appreance 
<dimen name="switch_radius">50dp</dimen> //change as per your view appreance 
<dimen name="switch_selector_padding">2dp</dimen> 
<dimen name="switch_stroke_height">0dp</dimen> 

wam również zmienić szerokość, wysokość i promień dla RES/wartości/dimens.xml.

Mam nadzieję, że to pomoże.

+0

Wprowadziłem zmiany takie jak wspomniałeś, ale nic się nie stało ... Właściwość rozmiaru wydaje się być bycie ignorowanym z jakiegoś powodu. – AnZ

+0

jego praca dla mnie dziękuję – Dentor

0

Możesz użyć tego widgetu "android.support.v7.widget.switchcompat". Obsługuje zgodność wsteczną.

+0

nie wydaje się działać. Zmieniono na "SwitchCompat" i to, jak teraz wygląda - http://i.imgur.com/feh8eAf.png. Rozmiar nie zmienia się teraz dla wszystkich poziomów interfejsu API – AnZ

Powiązane problemy