こんにちは。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年したら新しい端末にするのが常識みたいな世の中になってほしいものです。