68

Ice Cream Sandwichでは、オン オフ スライダーを表示するスイッチウィジェットが導入されました。

次のようにスイッチを追加しました。

<Switch 
    android:layout_width="fill_parent"
    android:layout_height="48dp"
    android:textStyle="bold"
    android:thumb="@drawable/switch_thumb_selector"
    android:track="@drawable/switch_bg_selector" />

トラックとサムのドローアブルは、可能なすべてのサイズにスケーリングする必要がある 9 つのパッチ イメージです。スイッチが指定された境界内で最大サイズにスケーリングされることを望んでいましたが、ドローアブルが指定されたスペース内の中央に配置されているようです。

スイッチのサイズを大きくして大きく見せることはできますか?

4

7 に答える 7

52

上記の答えは正しいです。これは、シェイプ ドローアブルを使用してスイッチの幅を変更する方法の小さな例です。

1) 親指にウルカラーを使用 (color_thumb.xml)

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <size android:height="40dp"  />
    <gradient android:height="40dp" android:startColor="#FF569BDA" android:endColor="#FF569BDA"/>
</shape>

2) トラックの灰色 (gray_track.xml)

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <size android:height="40dp"  />
    <gradient android:height="40dp" android:startColor="#dadadada" android:endColor="#dadadada"/>
</shape>

3) サムのセレクター (thumb.xml)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/gray_track" />
    <item android:state_pressed="true"  android:drawable="@drawable/color_thumb" />
    <item android:state_checked="true"  android:drawable="@drawable/color_thumb" />
    <item                               android:drawable="@drawable/gray_track" />
</selector>

4) トラックのセレクター (track.xml)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true"  android:drawable="@drawable/color_thumb" />
     <item                               android:drawable="@drawable/gray_track" />
</selector>

そしてついにスイッチイン

使用する

android:switchMinWidth="56dp"
android:thumb="@drawable/thumb"
android:track="@drawable/track"
于 2014-07-13T18:22:52.687 に答える
10

setSwitchMinWidth(width);今日も同様の問題に対処しましたが、Jelly Beanから始めて、スイッチ全体の最小幅を設定できることがわかりました。ただし、テキストが大きすぎると、ウィジェットは左側で切り取られるだけだと思いました。親指のデフォルトのテキストパディングを変更すると、ここで役立つ setThumbTextPadding(num);場合があります。これを変更できます。

唯一の問題-そしてこれは実際にはブロッカーです-私がこれまでにつまずいたのは、もちろん親コンテナのサイズに応じてスイッチを拡張する必要があるということです。そのために、スイッチをカスタム線形レイアウト(API <= 15のフォールバックも提供します)でラップし、これを試しました:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    if (android.os.Build.VERSION.SDK_INT >= 16) {
        adaptSwitchWidth(w);
    }
}

@TargetApi(16)
private void adaptSwitchWidth(int containerWidth) {
    Switch sw = (Switch) compoundButton;
    sw.setSwitchMinWidth(containerWidth);
}

残念ながら、愚かな理由が何であれ、スイッチウィジェットはそれに反応しません。OnLayoutChangeListener私も成功せずにそれをやろうとしました。理想的には、スイッチの現在のサイズもその状態でわかっている必要があり、次のように空き領域をパディングに「分散」させたいと思いました。

int textPadding = Math.max(0, (sw.getWidth() - containerWidth) / 4);
sw.setThumbTextPadding(textPadding);

しかし、おそらくそれがまだ適切にレイアウトされていないために、でsw.getWidth()0を返します。onSizeChanged()ええ、私たちはもうすぐそこにいます...何かに遭遇した場合は、私に知らせてください:)

于 2012-09-25T16:19:15.920 に答える
8

トラックの高さは、親指/スイッチ全体の高さを視覚的に決定する必要はありません。トラックの描画可能な形状に透明なストロークを追加した結果、トラックの周りにパディングができました。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="@color/track_color"/>
    <size android:height="@dimen/track_height"  />
    <size android:width="@dimen/track_width"  />

    <!-- results in the track looking smaller than the thumb -->
    <stroke
        android:width="6dp"
        android:color="#00ffffff"/>
</shape>
于 2015-06-26T18:15:00.433 に答える