2016-08-29 5 views
15
переключателя

Пользовательских форм выглядят следующим образом:Пользовательского переключатель - дорожки и размер селектора не работает ниже 21 API

Над API 21

enter image description here

Ниже API 21

enter image description here

Похоже, что <size/> блок не работает в <shape/> для API до 21 года.

Любые идеи, как это решить?


КОД

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"/> 

вытяжке/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> 

вытяжке/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> 

Возможно, кто-то столкнулся с аналогичной проблемой. Пожалуйста, поделитесь своим опытом.


EDIT: добавлена ​​Dimens используется

<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

Пожалуйста сообщение @ DIMEN/switch_track_width и высота размеров , – Warpzit

+0

@Warpzit, пожалуйста, проверьте мое редактирование – AnZ

+0

Я думаю (но не уверен), что XML-тег здесь не так. За исключением случаев, когда это вызвано синтаксической ошибкой xml (чего, похоже, нет, особенно если она работает в предыдущих версиях, но это не невозможно ...) xml - это формат пользователя для файлов данных, так же как обычный текст или «.ini» формат, используемый в слишком многих вопросах без, фактически, не имеет к этому никакого отношения. – bitifet

ответ

7

Все в порядке с тегом <size />. Создается и применяется Drawable. Ваша проблема полностью лежит в пределах Switch.

В старых версиях перед Lollipop большой палец использовался с текстом, а drawable был не более чем фоновым изображением, которое масштабировалось до необходимого размера. Вы можете проверить это, добавив текст в атрибуты textOff и textOn. Кроме того, существует минимальная ширина.

Так просто добавить switchMinWidth 0 и thumbTextPadding половины диаметра пальца

<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" /> 

и правильного определения радиуса для него

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

отличное объяснение, спасибо! Кажется, он решил мою проблему – AnZ

1

Я скопировал свой код и попытаться реализовать в моей машине, первым делом в вашей вытяжке/switch_selector.xml внутри <size> ширина собственности должна иметь switch_track_width вместо switch_track_height:

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

Хотя вы решите вашу проблему, но я бы предложить еще один dimens.xml файл в каталоге RES/значения-V21 и добавить

<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> 

Вам также изменить ширину, высоту и радиус Реза/значения/dimens.xml.

Надеюсь, это поможет.

+0

Я внес изменения, как вы упомянули, но ничего не случилось ... Свойство размера похоже по какой-то причине игнорируется. – AnZ

+0

его работа для меня спасибо – Dentor

0

Вы можете использовать этот виджет "android.support.v7.widget.switchcompat". Он поддерживает обратную совместимость с поддержкой.

+0

, похоже, не работает. Изменено на 'SwitchCompat' и то, как оно выглядит сейчас - http://i.imgur.com/feh8eAf.png. Размер теперь не меняется для всех уровней API – AnZ

 Смежные вопросы

  • Нет связанных вопросов^_^