web-dev-qa-db-ja.com

SwitchCompatにカスタムスタイルを適用する方法

SwitchCompatにカスタムスタイルを適用したいと思います。ドローアブルとテキストをオンとオフの状態に変更します。どうすればこれを達成できますか?これがどのように行われるかについての例は見つかりません。私はstyles.xmlで以下を試しましたが、どうやら正しい親を使用していません:

_<style name="Switch" parent="Android:Widget.AppCompat.Widget.CompoundButton.SwitchCompat">
    <item name="Android:textOn">@string/common_yes</item>
    <item name="Android:textOff">@string/common_no</item>
    <item name="Android:thumb">@drawable/btn_switch_selector</item>
    <item name="Android:track">@drawable/btn_switch_bg_selector</item>
</style>
_

編集

私はなんとかコードの中でドローアブルを変更しました。

_switchView.setThumbResource(R.drawable.btn_switch_selector);
switchView.setTrackResource(R.drawable.btn_switch_bg_selector);
_

しかし、私はまだスイッチのテキストを変更する方法を見つけていません。次のスニペットは機能していないようです。多分私はいくつかのテキストプロパティを設定する必要がありますか?

_switchView.setTextOn(context.getString(R.string.common_yes));
switchView.setTextOff(context.getString(R.string.common_no));
_

SwitchCompatソースコードによると、オン/オフテキストのサポートがあるはずです: /support/v7/widget/SwitchCompat.Java

{@link #setText(CharSequence)text}プロパティはスイッチのラベル​​に表示されるテキストを制御しますが、{@ link #setTextOff(CharSequence)off}および{@link #setTextOn(CharSequence)on}テキストはテキストを制御します親指に。

編集2

最後にコードソリューションを見つけました。どうやら、スイッチにテキストを表示するには、setShowText()trueに設定する必要があります。

_switchView.setTextOn(context.getString(R.string.common_yes));
switchView.setTextOff(context.getString(R.string.common_no));
switchView.setShowText(true);
switchView.setThumbResource(R.drawable.btn_switch_selector);
switchView.setTrackResource(R.drawable.btn_switch_bg_selector);
_

およびxmlソリューション

_<Android.support.v7.widget.SwitchCompat
        Android:id="@+id/view_switch"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"            
        Android:thumb="@drawable/btn_switch_selector"
        app:track="@drawable/btn_switch_bg_selector"
        Android:textOn="@string/common_yes"
        Android:textOff="@string/common_no"
        app:showText="true" />
_

これを_styles.xml_に入れる方法があるかどうか、私はまだ知りたいです。

20
Wirling

最後に、アプリ全体に同じスタイルを適用する方法を見つけました。次の行をthemes.xml

<item name="switchStyle">@style/Custom.Widget.SwitchCompat</item>

そして、私のstyles.xml

<style name="Custom.Widget.SwitchCompat" >
    <item name="Android:thumb">@drawable/btn_switch_selector</item>
    <item name="track">@drawable/btn_switch_bg_selector</item>
    <item name="showText">true</item>
    <item name="Android:textOn">@string/common_yes</item>
    <item name="Android:textOff">@string/common_no</item>
</style>
12
Wirling

スタイルには親を含める必要があります

<item name="switchStyle">@style/MySwitchCompat</item>

<style name="MySwitchCompat" parent="Widget.AppCompat.CompoundButton.Switch">
    <item name="Android:textColor">@color/accent</item>
    <item name="Android:fontFamily">sans-serif-light</item>
</style>
2
Pascalius