Android 5.0 Lollipop でのSwitch

タグ: | 投稿日: 投稿者:

こんにちは。kikuです。

Android 5.0 が普及してきましたね。
既存のアプリが何も調整せず動いてくれるととても助かるんですけど、なかなかそううまくはいきません。

今回5.0用に対応したのがSwitch。
4.4までは普通に表示していたスイッチが、何故かテキストしか表示されなくなってしまいました。
現象としてはこんな感じ。
なんで消えてしまったのか不明なんですが、色々調べても他に同じ現象の方があまり居なかったので特別な条件があるのかも。。

とりあえず元々のxmlはこんな感じ

<Switch
    android:id="@+id/switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"
    android:textOff="OFF"
    android:textOn="ON"
    android:singleLine="true"/>

で今回対応したのがこれ。

<Switch
    android:id="@+id/switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"
    android:textOff="OFF"
    android:textOn="ON"
    android:thumb="@drawable/switch_bg"
    android:track="@drawable/switch_track"
    android:switchMinWidth="35dp"
    android:singleLine="true"/>
drawable/switch_bg.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/g_thumb" />
    <item android:state_pressed="true"  android:drawable="@drawable/c_thumb" />
    <item android:state_checked="true"  android:drawable="@drawable/c_thumb" />
    <item                               android:drawable="@drawable/g_thumb" />
</selector>
drawable/switch_track.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/c_thumb" />
    <item                              android:drawable="@drawable/g_track" />
</selector>
drawable/g_thumb.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:height="25dp" android:width="25dp" />
    <gradient android:height="25dp" android:width="25dp"
        android:startColor="#BBBBBBBB" android:endColor="#BBBBBBBB"/>
</shape>
drawable/c_thumb.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:height="25dp" android:width="25dp" />
    <gradient android:height="25dp" android:width="25dp"
        android:startColor="#FF5599DD" android:endColor="#FF5599DD"/>
</shape>
drawable/g_track.xml

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

これらを設定したら表示できました。
Switchにthumbとかtrackを設定しないと5.0だと消えてしまうみたいです、私の環境だと。(他は知らない)

※2015/12/4追記
AndroidManifest.xmlのテーマ設定を新しくすれば表示が可能とのコメントを頂きました!
ほげさん、ありがとうございます!

世間的には5.0からSwitchCompatというのが追加されたようで、ちょっと調べたらそれを使おうみたいな流れになっているように感じられましたが、実際はどうなんでしょうか。
時代は古い端末を切り捨てていくスタイルなんでしょうかね。

開発者としましては、できれば発売から2年したら新しい端末にするのが常識みたいな世の中になってほしいものです。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

Android 5.0 Lollipop でのSwitch」への2件のフィードバック

  1. ほげ

    AndroidManifest.xmlに設定しているテーマが古いのだと思います。

    android:theme="@android:style/Theme.Holo.Light.NoActionBar"

    などに変更すると表示できました!

    返信
    1. kiku 投稿作成者

      コメント&アドバイスありがとうございます!

      テーマの変更を試してみます!

      返信

kiku にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>