web-dev-qa-db-ja.com

カスタムスイッチ-トラックとセレクターのサイズが21 API未満で機能しない

カスタム形状スイッチは次のようになります。

上記のAPI 21

enter image description here

API 21の下

enter image description here

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

すべてが<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>
11
tynn

私はあなたのコードをコピーして私のマシンに実装しようとしました。最初に<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の幅、高さ、半径も変更します。

お役に立てば幸いです。

1
Rajendra

このウィジェット「Android.support.v7.widget.switchcompat」を使用できます。下位互換性のサポートをサポートしています。

0
kidyu