AppCompat ライブラリから SwitchCompat の色を変更する方法 [重複] 質問する

AppCompat ライブラリから SwitchCompat の色を変更する方法 [重複] 質問する

アプリケーションには色の異なるスイッチ コントロールがいくつかあり、それらの色を変更するために複数のカスタム描画可能セレクターを使用しました。

AppCompat v21 ライブラリのリリースに伴い、新しい android.support.v7.widget.SwitchCompat コントロールが導入されました。

カスタマー ドローアブル セレクターを使用せずに、XML またはコードを使用して、SwitchCompat の色をプログラムで変更することは可能ですか?

ベストアンサー1

AppCompat の色調属性:

まず、appCompat libの記事をご覧ください。そこにはさまざまな属性を設定できます:

色プライマリ: アプリの主なブランド色。デフォルトでは、これがアクション バーの背景に適用される色です。

色プライマリダーク: 主要なブランド カラーの暗いバリエーション。デフォルトでは、この色がステータス バー (statusBarColor 経由) とナビゲーション バー (navigationBarColor 経由) に適用されます。

色アクセント: 主要なブランド カラーを補う明るい色。既定では、この色がフレームワーク コントロールに適用されます (colorControlActivated 経由)。

カラーコントロールノーマル: 通常の状態のフレームワーク コントロールに適用される色。

colorControl がアクティブ化されました: フレームワーク コントロールがアクティブ化された状態 (チェック済み、スイッチオンなど) で適用される色。

カラーコントロールハイライト: フレームワーク コントロールのハイライト (例: リップル、リスト セレクター) に適用される色。

カラーボタン通常: 通常の状態のフレームワーク ボタンに適用される色。

colorSwitchThumbNormal: フレームワークスイッチのサムネイルに通常状態で適用される色。(スイッチオフ)


単一のアクティビティ内のすべてのカスタム スイッチが同じである場合:

以前の属性を使用すると、アクティビティごとに独自のテーマを定義できます。

<style name="Theme.MyActivityTheme" parent="Theme.AppCompat.Light">
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/my_awesome_color</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/my_awesome_darker_color</item>

    <!-- colorAccent is used as the default value for colorControlActivated,
         which is used to tint widgets -->
    <item name="colorAccent">@color/accent</item>

    <!-- You can also set colorControlNormal, colorControlActivated
         colorControlHighlight, and colorSwitchThumbNormal. -->

</style>

そして :

<manifest>
...
    <activity
        android:name=".MainActivity" 
        android:theme="@style/Theme.MyActivityTheme">
    </activity>
...
</manifest>

1 つのアクティビティに複数のカスタム スイッチを設定する場合:

appcompatのウィジェットの色付けは、レイアウトの膨張を阻止し、その場所にウィジェットの色付けを考慮した特別なバージョンを挿入することで機能します(Chris Banesを参照)。それについて投稿する) レイアウト XML ファイルの各スイッチにカスタム スタイルを適用することはできません。スイッチを適切な色で着色するカスタム コンテキストを設定する必要があります。

--

そうするために 5.0 以前 グローバル テーマをカスタム属性でオーバーレイするコンテキストを作成し、プログラムでスイッチを作成する必要があります。

ContextThemeWrapper ctw = ContextThemeWrapper(getActivity(), R.style.Color1SwitchStyle); 
SwitchCompat sc = new SwitchCompat(ctw)

AppCompat では、スイッチ ウィジェットにテーマを適用するには、v22.1次の方法を使用できます。XML

<RelativeLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    ...>

    <android.support.v7.widget.SwitchCompat
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:theme="@style/Color1SwitchStyle"/>

カスタムスイッチテーマ:

<style name="Color1SwitchStyle">
    <item name="colorControlActivated">@color/my_awesome_color</item>
</style>

--

の上アンドロイド5.0新しいビュー属性が誕生したようです: android:theme(マニフェストのアクティビティ宣言の1つの用途と同じ)。別のChris Banesに基づく役職後者を使用すると、レイアウト xml からビューに直接カスタム テーマを定義できるようになります。

<android.support.v7.widget.SwitchCompat
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/Color1SwitchStyle"/>

SwitchCompatのトラックの色を変更するには

vine'thのおかげで、スイッチがオフのときにトラックのフォアグラウンドを指定する方法を説明したSOの回答へのリンクで回答を完了しました。そこには

おすすめ記事