カスタム形状スイッチは次のようになります。
上記のAPI 21
API 21の下
21より前のAPIの場合、<size/>
ブロックは<shape/>
では機能しないようです。
これを解決する方法はありますか?
[〜#〜]コード[〜#〜]
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"/>
drawable/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>
drawable/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 [〜#〜]:使用される追加の寸法
<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>
すべてが<size />
鬼ごっこ。 Drawable
が作成され、正しく適用されます。問題は完全にSwitch
内にあります。
以前のバージョンのLollipop以前は、親指がテキストで使用され、ドローアブルは必要なサイズにスケーリングされた背景画像にすぎませんでした。これを確認するには、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>
私はあなたのコードをコピーして私のマシンに実装しようとしました。最初に<size>
widthプロパティ内のdrawable/switch_selector.xmlで、switch_track_heightの代わりにswitch_track_widthを使用する必要があります。
<size
Android:width="@dimen/switch_track_width"
Android:height="@dimen/switch_track_height" />
問題は解決しますが、res/values-v21ディレクトリ内にdimens.xmlファイルをもう1つ追加して、
<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>
Res/values/dimens.xmlの幅、高さ、半径も変更します。
お役に立てば幸いです。
このウィジェット「Android.support.v7.widget.switchcompat」を使用できます。下位互換性のサポートをサポートしています。