web-dev-qa-db-ja.com

Android LollipopでウィジェットのtextOnとtextOffが動作しない

スイッチウィジェットの動作は、Lollipop(5.0)で変更されました。

    <Switch
        Android:id="@+id/switcher"
        Android:layout_width="wrap_content"
        Android:layout_height="0dp"
        Android:layout_marginBottom="16dp"
        Android:layout_marginRight="8dp"
        Android:layout_marginEnd="8dp"
        Android:layout_toEndOf="@id/another_view"
        Android:layout_toRightOf="@id/another_view"
        Android:layout_alignParentRight="true"
        Android:layout_alignParentEnd="true"
        Android:layout_alignParentBottom="true"
        Android:textOff="@string/disabled"
        Android:textOn="@string/enabled"
        Android:fontFamily="sans-serif-condensed"
        />

TargetSdkVersion = 19の場合のレンダリングされたスイッチ:

enter image description here

TargetSdkVersion = 21の場合のレンダリングされたスイッチ:

enter image description here

Android Studioは引き続きテキスト付きのスイッチを生成しますが、targetSdkVersion = 21で構築されたapkがLollipop(Nexus 5)を搭載したデバイスで実行されると、スイッチはテキストを失います。同じLollipopデバイスでtargetSdkVersion = 19を使用してビルドされたapkは、期待どおりにテキストでスイッチを適切にレンダリングします。

どうして?推奨される回避策はありますか?

49
Jim Vitek

スイッチウィジェットアセットはテキストではうまく機能しないため、デフォルトではテキストはマテリアルテーマの下に表示されません。設定したテキストは、アクセシビリティサービスにコンテンツを説明するために使用されます。

これは _Android:showText_ プロパティまたは Switch.setShowText(boolean) メソッドを使用して変更できます。

_<Switch
    ...
    Android:showText="true" />
_

AppCompatスイッチを使用している場合は、代わりに_app:showText_を使用します。

125
alanv