2015-04-02 3 views
2

Я пытаюсь реализовать SwitchCompat из AppCompat, но он выглядит по-разному на разных устройствах версии. На Lollipop & Froyo это выглядит хорошо, но на Gingerbread на KitKat это не похоже на переключатель.SwitchCompat on pre lollipop devices

Код:

<android.support.v7.widget.SwitchCompat 
     android:id="@+id/label_switch" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textOff="No" 
     android:textOn="Yes" 
     android:checked="false" /> 

Могу ли я сделать эти переключатели выглядят одинаково во всех версиях или, по крайней мере, сделать их похожими на коммутаторе?

+0

возможно дубликат [Switchcompat не отображая переключатель] (http://stackoverflow.com/ Вопросы/26563986/switchcompat-not-display-the-switch) –

+0

Принятый ответ: использовать родительский элемент 'Theme.AppCompat', но я использую это только' Theme.AppCompat.NoActionBar' (используя панель инструментов). – user3677365

+0

Как насчет копирования 9patch и других файлов в проект и заставить его работать? Только если у вашего проекта нет никаких проблем. –

ответ

9

Min sdk моей заявки был GingerBread, и у меня была та же проблема, в конце концов я нашел решение. Чтобы сделать совместимым во всех версиях для Android, я использовал два вырезаемых в папках res/drawable, один для thumb и один для track. и назначьте их SwitchCompat в java-коде, а не в xml. Вот код, который вы должны использовать.

SwitchCopmat виджет:

<android.support.v7.widget.SwitchCompat 
android:id="@+id/label_switch" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"/> 

вытяжки для большого пальца, switch_compat_thumb.xml

<?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:bottom="@dimen/switch_compat_thumb_margin" 
    android:left="@dimen/switch_compat_thumb_margin" 
    android:right="@dimen/switch_compat_thumb_margin" 
    android:top="@dimen/switch_compat_thumb_margin"> 

    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_checked="true"> 
      <shape android:shape="oval"> 
       <size 
        android:width="@dimen/switch_compat_thumb_size" 
        android:height="@dimen/switch_compat_thumb_size"/> 
       <solid android:color="@android:color/red"/> 
      </shape> 
     </item> 

     <item> 
      <shape android:shape="oval"> 
       <size 
        android:width="@dimen/switch_compat_thumb_size" 
        android:height="@dimen/switch_compat_thumb_size"/> 
       <stroke 
        android:width="@dimen/switch_compat_thumb_stroke_width" 
        android:color="@android:color/red"/> 
       <solid android:color="@android:color/transparent" /> 
      </shape> 
     </item> 
    </selector> 
</item> 

вытяжки для track, switch_compat_track.xml

<?xml version="1.0" encoding="utf-8"?> 
    <shape 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<corners android:radius="@dimen/switch_compat_track_radius"/> 
<stroke 
    android:width="@dimen/switch_compat_track_stroke_width" 
    android:color="@android:color/red"/> 
<solid android:color="@android:color/transparent" /> 

, а затем, после нахождения его в Java, назначить thumb и track к SwitchCompat в Java-код:

final SwitchCopmat switchCompat = (SwitchCopmat) findViewById(R.id.label_switch); 

    //add thumb and track drawable in java since it doesn't work on xml for gingerbread 
    switchCompat.setThumbDrawable(getResources().getDrawable(R.drawable.switch_compat_thumb)); 
    switchCompat.setTrackDrawable(getResources().getDrawable(R.drawable.switch_compat_track)); 
+0

Это почти работает для меня, но можете ли вы включить определения из размеров? Margina, width и т. Д. Спасибо – shtolik

+4

@shtolik в switch_compat_thumb.xml элемент (кнопка, левый, верхний, правый) имеет 4dp, тогда первая овальная форма имеет 8dp (для ширины и высоты), а строчка имеет ширину 4dp. вторая овальная форма снова имеет 8dp (для ширины и высоты) и 2dp для ширины хода. и в switch_compat_track.xml форма прямоугольника имеет углы с радиусом 7dp и ход с шириной 2dp – Sherry