728x90
728x170

Handler 는 기존에 사용하던 Renderer 와 비슷한데
Renderer 는 각 기기 특성을 타는 부분을 각각의 Android, iOS 프로젝트에 네이티브 코드로 처리를 할수 있도록 했다
그런데 Handler 는 이를 하나의 파일에서 처리 가능하도록 했다

Android 에서 Entry 컨트롤에 언더라인이 생기게 되는데 이를 없애려면
기존에는 아래처럼 Renderer 를 이용해서 없애야했다.

Renderer 사용예시

using Android.Content;
using Android.Graphics.Drawables;

using APP.Controls;
using APP.Droid.Renderers;

using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryRenderer))]
namespace APP.Droid.Renderers
{
    public class CustomEntryRenderer : EntryRenderer
    {
        public CustomEntryRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                //Control.SetBackground(null);
            }

            if (Control != null)
            {
                GradientDrawable gd = new GradientDrawable();
                gd.SetColor(global::Android.Graphics.Color.Transparent);
                Control.SetBackground(gd);
            }
        }
    }
}​

하지만 Handler 를 이용하면 아래 처럼 간단하게 언더라인을 제거 할수 있다.

MauiProgram.cs

#if ANDROID
		// Entry 에서 언더라인 제거
		Microsoft.Maui.Handlers.EntryHandler.EntryMapper.AppendToMapping("NoUnderline", (h, v) =>
		{
			h.NativeView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToAndroid());
		});
#endif

그런데 Handler 는 익숙해지는데 시간이 걸릴것 처럼 생겨먹었다;;

ButtonHandler 등등 각컨트롤에 대해서 처리가 가능하고 직접 만든 컨트롤도 지정이 가능한것 같다

이는 추후 더 조사하고 테스트 해봐야겠다


* 추가

Entry 의 글자 색을 기기별로 바꾸고 싶을때는 아래처럼 사용한다.

		// 기기에 따른 색상 변경
		Microsoft.Maui.Handlers.EntryHandler.EntryMapper.AppendToMapping(nameof(IView.Background), (handler, view) =>
		{
			if (view is Entry)
			{
#if ANDROID
				handler.NativeView.SetTextColor(Colors.Red.ToNative());
#elif IOS
				handler.NativeView.TextColor = Colors.Yellow.ToNative();
#elif WINDOWS
				handler.NativeView.Foreground = Colors.Green.ToNative();
#endif
			}
		});

728x90
그리드형
Posted by kjun
,