2016-09-13 9 views
0

私はAndroid 5と6でうまくいくカスタムスイッチ要素を持っています。しかし、Android 4には問題があります。 トグルの形状を円形に保つ方法は?Android 4のカスタムスイッチの外観を修正するには

Android 5,6。ここでは写真1

enter image description here

アンドロイド4.写真2

enter image description here

は私のコードです:

<Switch 
      android:id="@+id/row_device_switch" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:textOn="ON" 
      android:thumb="@drawable/customswitchselector" 
      android:track="@drawable/custom_track" 
      android:textOff="OFF" 
      android:layout_marginRight="14dp" 
      android:switchMinWidth="@dimen/custom_switcher_track_width" 
      /> 

custom_track.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape 
      android:shape="rectangle" 
      android:visible="true" 
      android:dither="true" 
      android:useLevel="false" 
      > 
      <corners 
       android:radius="@dimen/cutsom_switcher_track_radius"/> 
      <size 
       android:width="@dimen/custom_switcher_track_width" 
       android:height="@dimen/custom_switcher_track_height" /> 
      <stroke 
       android:width="@dimen/custom_switcher_stroke_thickness" 
       android:color="@android:color/white" 
       /> 
     </shape> 
    </item> 
    <item 
     android:left="@dimen/custom_switcher_track_line_horizontal_margin" 
     android:right="@dimen/custom_switcher_track_line_horizontal_margin" 
     > 
     <shape 
      android:shape="line" 
      > 
      <stroke 
       android:width="@dimen/custom_switcher_екфсл_thickness" 
       android:color="@android:color/white" 
       /> 
     </shape> 
    </item> 
</layer-list> 

customswitchselector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_checked="true"> 
     <layer-list> 
      <item> 
       <shape 
        android:shape="oval" 
        android:visible="true" 
        android:dither="true" 
        android:useLevel="false" 
        > 
        <solid 
         android:color="@color/colorListEnd" 
         /> 
        <size 
         android:width="@dimen/custom_switcher_circle_size" 
         android:height="@dimen/custom_switcher_circle_size" /> 
        <stroke 
         android:width="@dimen/custom_switcher_stroke_thickness" 
         android:color="@android:color/white"/> 
       </shape> 
      </item> 
      <item 
       android:left="@dimen/custom_switcher_between_circles_margin" 
       android:right="@dimen/custom_switcher_between_circles_margin" 
       android:top="@dimen/custom_switcher_between_circles_margin" 
       android:bottom="@dimen/custom_switcher_between_circles_margin" 
       > 
       <shape 
        android:shape="oval" 
        > 
        <size 
         android:width="@dimen/custom_switcher_inner_circle_size" 
         android:height="@dimen/custom_switcher_inner_circle_size" /> 
        <solid 
         android:color="@android:color/white"/> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 
    <item android:state_checked="false"> 
     <layer-list> 
      <item> 
       <shape 
        android:shape="oval" 
        android:visible="true" 
        android:dither="true" 
        android:useLevel="false"> 

        <solid 
         android:color="@color/colorListEnd" 
         /> 
        <size 
         android:width="@dimen/custom_switcher_circle_size" 
         android:height="@dimen/custom_switcher_circle_size" /> 
        <stroke 
         android:width="@dimen/custom_switcher_stroke_thickness" 
         android:color="@android:color/white"/> 
       </shape> 
      </item> 
      <item 
       android:left="@dimen/custom_switcher_between_circles_margin" 
       android:right="@dimen/custom_switcher_between_circles_margin" 
       android:top="@dimen/custom_switcher_between_circles_margin" 
       android:bottom="@dimen/custom_switcher_between_circles_margin" 
       > 
       <shape 
        android:shape="oval"> 
        <size 
         android:width="@dimen/custom_switcher_inner_circle_size" 
         android:height="@dimen/custom_switcher_inner_circle_size" 
         /> 
        <stroke 
         android:width="@dimen/custom_switcher_stroke_thickness" 
         android:color="@android:color/white" 
         /> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 
</selector> 

答えて

1

それが均一に動作しない作りSwitchにはいくつかの小さな問題があります。あなたの場合、android:textOffandroid:textOnの値を""にする必要があります。それ以外の場合は、トラックの幅と親指の幅がテキストを保持するように調整されます。また、親指のサイズを保証するには、android:thumbTextPaddingを定義する必要があります。 drawableは単なるバックグラウンドであり、直接影響を与えません。

<Switch 
    android:id="@+id/row_device_switch" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:layout_marginRight="14dp" 
    android:switchMinWidth="@dimen/custom_switcher_circle_radius" 
    android:textOff="" 
    android:textOn="" 
    android:thumb="@drawable/customswitchselector" 
    android:thumbTextPadding="@dimen/switch_thumb_radius" 
    android:track="@drawable/custom_track" /> 

@dimen/custom_switcher_circle_radius@dimen/custom_switcher_circle_size次元の半分の値を持つ必要があります。

+0

あなたは素晴らしいです!ありがとうございました! – user3400881

関連する問題