• Xamarin Android自定义文本框


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

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


    自定义的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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <EditTextListener.CustomerEditText
            android:id="@+id/edit_search"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_margin="10dp"
            android:background="@drawable/bg_frame_search"
            android:hint="带删除按钮的EditText"
            android:maxLength="50"
            android:padding="5dp"
            android:singleLine="true"
            android:textColor="#000000" />
    </LinearLayout>
    自定义的背景样式:bg_frame_search.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <shape
      xmlns:android="http://schemas.android.com/apk/res/android">
      <solid android:color="@color/background_white"/>
      <corners android:radius="5dp"/>
      <stroke android:width="1px" android:color="@color/frame_search"/>
    </shape>
    

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



  • 相关阅读:
    vSphere 6.5支持512e,NVMe SSD呢?
    分布式队列神器 Celery
    www.coursera.org
    各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
    SSD S.M.A.R.T
    2018世界人工智能大会在上海开幕
    ER TO SQL语句
    E-R图样例
    关于微软的.NET版本系列
    ArcGIS 10.6 安装破解教程
  • 原文地址:https://www.cnblogs.com/zhangmumu/p/7374811.html
Copyright © 2020-2023  润新知