xamarin android 自定义文本框简单的用法

关键点在于,监听EditText的内容变化,不同于java中文本内容变化去调用EditText.addTextChangedListener(mTextWatcher);为EditText设置内容变化监听!
简单来说就是添加一个AfterTextChanged 事件就OK了,这是最简单的一种做法,当然你要想java那样去监听也可以的。
来看一下实现的效果图:

Xamarin Android自定义文本框
自定义的EditText::CustomerEditText.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Graphics.Drawables;
using Android.Util;
using Java.Lang;
using Android.Text;
using Android.Graphics;

namespace EditTextListener
{
    public class CustomerEditText:EditText
    {
        private Drawable imgClear;
        private Context Context;
        public CustomerEditText(Context context, IAttributeSet attrs) : base(context, attrs)
        {
            this.Context = context;
            init();
        }
        private  void init()
        {
            imgClear = Context.Resources.GetDrawable(Resource.Drawable.del);
            AfterTextChanged += (s, e) =>
            {
                setDrawable();
            };

        }

        //回执删除图片
        private void setDrawable()
        {
            if (Length() < 1)
                SetCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
            else
                SetCompoundDrawablesWithIntrinsicBounds(null,null,imgClear,null);
        }
        //当触摸范围在右侧时,触发删除方法,隐藏叉叉
        public override bool OnTouchEvent(MotionEvent e)
        {
            if (imgClear != null && e.Action == MotionEventActions.Up)
            {
                int eventX = (int)e.RawX;
                int eventY = (int)e.RawY;
                Rect rect = new Rect();
                GetGlobalVisibleRect(rect);
                rect.Left = rect.Right - 100;
                if (rect.Contains(eventX, eventY))
                {
                    Text=string.Empty;
                }
            }
            return base.OnTouchEvent(e);
        }
    }
}
布局文件Main.axml
自定义的背景样式:bg_frame_search.xml

颜色值我就不贴了,自己写几个颜色就OK了。
代码非常简单,当然这是最简单的实现方法,还有很多功能小功能都没实现。所以后面继续努力吧。



相关文章: