Xamarin.FormsでEntryコントロールのカーソル関連の色を変える方法
カスタムレンダラーから変更する方法がよくわからなかった.
↑の記事によると,カスタムレンダラに追加すれば良いとのこと.
IntPtr IntPtrtextViewClass = JNIEnv.FindClass(typeof(TextView)); IntPtr mCursorDrawableResProperty = JNIEnv.GetFieldID (IntPtrtextViewClass, "mCursorDrawableRes", "I"); JNIEnv.SetField (Control.Handle, mCursorDrawableResProperty, 0); // replace 0 with a Resource.Drawable.my_cursor
これはまだ試していない.
成功したのはstyles.xmlに以下を記述する方法. AndroidプロジェクトのResources/values/styles.xml内に以下を追加する.
<style name="MainTheme" parent="MainTheme.Base"> <item name="colorAccent">#F99014</item><!-- これ --> </style>
確かにこれでカーソルとバブル(カーソルの下のつまみ)の色,どころかアクセントカラーが全て変わる. これが正しいのかはわからない.
カスタムレンダラーでEntryの下線の色を変更する
以下のようにカスタムレンダラーでEntryコントロールの下線の色を変更すると,styles.xmlの設定を上書きする形で表示される.
Entryコントロールの下線の色の変更は以下のとおり. shuhelohelo.hatenablog.com
(名前空間は適宜変更してください)
using Android.Content; using Android.Content.Res; using Android.OS; using TakeMeThereXamarinForms.Droid.Renderers; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))] namespace TakeMeThereXamarinForms.Droid.Renderers { class MyEntryRenderer : EntryRenderer { public MyEntryRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); if (Control == null || e.NewElement == null) return; if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { //下線の色を変更 var color = Xamarin.Forms.Color.FromHex("#9BFFE6"); Control.BackgroundTintList = ColorStateList.ValueOf(color.ToAndroid()); } } } }
↓下線だけ明るい水色に.
カーソルもつまみも全部カスタムレンダラーでできたら変更が一箇所にまとまってすっきりするんだけれどな.
うーん,簡単だろうと思ったことが難しかったりする