Qiitaの14日目の記事です。初心者向きとは言い難いかも知れませんが、EffectsはさておきResourceDictionaryに関しては序盤から使っていくべき機能だと思いますので、こんなこともできるんだなぁという感じで流し読みしていただけると幸いです。サンプルのアプリはちゃんと中身も実装しているので、実際に動かしてみることもできるはずですので良かったら参考にしてみてください。qiita.comを早速試してみました。この記事はものすごく丁寧でわかりやすくResourceDictionaryについて解説されているので、もしまだ見てない方は必読だと思います。本題に戻りまして、テーマ切り替えのサンプルとしてこんなイメージで作成していきました。テーマを2つ作って動的に切り替えるとりあえずやっつけBMI測定アプリを作ってそれに適用してみる以上のような感じで実装した結果がこちらいい感じでテーマが切り替わってますが、いくつか気になる箇所がありませんか?私は気になりまくりでした。色が指定できないパーツがいくつかあるんですよね。Android共にSliderとSwitchの後ろのバーみたいなところの色AndroidのSliderとSwitchのつまみの色Androidのステータスバーの色AndroidのFormsで変えられない色は大概AndroidのThemeで変更する必要があるんですが(今回の部分はアクセントカラー)、FormsのThemeで動的に色を変える時にそれに合わせてAndroidのThemeも変更するとかだるすぎるので、今回はResourceDictionaryの切り替えだけでなんとかするために、Effectsを使って無理やり対応していきたいと思います。完成品github.com作成するEffectsの仕様サンプルなのでやっつけ仕様で以下のとおりとします。1つでステータスバー・Slider・Switch全部対応するAndroidのMainActivityはFormsAppCompatActivityであるものとするプロパティはColorのみとするColorプロパティがDefaultからそれ以外に変化した時にEffectを追加するEffectはRemoveしないものとするこれを踏まえて作成したEffectsが以下になります。AlterColor(PCL)AlterColorPlatformEffect(iOS)AlterColorPlatformEffect(Android)今回はEffectについての説明は省略します。Effectsについて基本的なことはこちらで。ticktack.hatenablog.jpそれから当ブログのこちらの記事で具体的な使い方を書いていますのでもしよければ参考にしてください。kamusoft.hatenablog.jpAndroidのステータスバーの色に対応するステータスバーの色はNavigationPageで指定するようにします。AccentColor}"がEffect適用に必要な箇所です。color;}コードのコメントの通りです。iOSはつまみの色はデフォルトのままが自然なので変更しません。seekBar.Thumb.SetTint(color);}ProgressDrawableのどれがどの色かは総当たりで調べましたw決め打ちなのでバージョンが変わったりした時に使えなくなる可能性大なので、ちゃんと変換できるかのチェックやindexのチェック等をして落ちないようにしておくのが良いと思います。それからこんな風にdrawableの色を変えると他のEffectを適用していないパーツの色も変わってしまいます。共有してるんでしょうね。今回の要件は別に同時に変わっても問題ないんですが、もし個別に変更したい場合は以下のようにコピーを作成して再設定する必要があります。いうか、そもそも正規の方法が知りたいので、もしご存知の方がおられましたら教えていただけると幸いです。}ただこれだけだと動的に色を変えた時におかしなことになるので、もう一工夫必要です。Xaml指定EffectsはStyleでも指定可能です。2;}Offの時の背景も設定できますが、今回は無しにしました。Off背景を設定する場合はコメントアウト部分を参考にしてください。ripple.SetColor(trackColors);}TrackDrawableとThumbDrawableのSetTintListに色リストを設定すればいけました。この方法に気づいて良かったです。Stateのtrueかfalseかはマイナスつけたらfalseになるみたいですね。それからSwitchをタップしたときにRippleエフェクトっぽいのがでるんですが、ここにもうっすら色がついてます。気にならないレベルではあるんですが、できれば変えときたいので変えました。BackgroundをRippleDrawableに変換して色を貼り直してます。API21だけON・OFFの時の効果色が逆になってしまうんですよね。22〜24は問題無しなんですが。</ResourceDictionary></ContentPage.Resources>SliderにもSwitchにも同じEffectを適用する場合は共通の基底クラス(この場合View)にStyleでEffect適用の定義をして、これを各部品にBaseOnで継承してあげると良い感じです。Setterの中でOnPlatform例えばボタンの高さがAndroidでは実際に背景が表示されている領域の高さと異なるのでiOSと同じ値だと見た目が揃いません。いう時はOnPlatformを使うんですが以下のようにStyleのSetterでも指定できます。</Setter></Style>その他のViewに関して変えられない色は今回のSliderやSwitch以外にももちろんあります。大体はぐぐってEffectsなりCustomRendererなりで解決できると思います。Androidの部品はコードだけで色を変更する情報が少ないので、そこは毎回苦労するところです。この辺も情報が集まってくれば良いなと思います。まとめResourceDictionaryは便利すぎるので初心者のうちから使ってみよう!ResourceDictionaryでの色定義やサイズ定義、MargeWithでの継承、Style、それらを組み合わせることでCSS程じゃないけど割とそれに近いことができるようになった!変えられない色はEffects機能を使って変えてしまおう!Effects等で変更してしまえばAndroidのThemeはほぼ無視しても良し...かもしれない。Platform-Specifics」の日本語訳(...https://developer.xamarin.com/guides/xamarin-forms/platform...2017-08-25Xamarin.Formsに独自のImageSourceを追加して標準のImageコントロールでSv...ある部品をSVG対応させる場合は基本的にはNgraphicsなどの外部...2017-07-12Xamarin.FormsでTimePickerやDataPickerを付加したりEditorにPl...とりとめのないタイトルですみません。(2)月別アーカイブはてなブログをはじめよう!kamusoftさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。