BeforeTextChanged事件不会返回要在自定义Entry Renderer中输入的文本

时间:2018-01-28 11:43:03

标签: xamarin xamarin.forms custom-renderer xamarin.forms.entry

我在Android中使用了自定义条目渲染器,并且我已经实现了BeforeTextChanged事件,这样我就可以获得要输入的文本,但它不会返回该文本。

我以两种不同的方式实施:

  • 首先通过类实现ITextWatcher然后重写上述事件(帮助link):

    void ITextWatcher.BeforeTextChanged(ICharSequence s, int start, int count, int after)
    {
    
        var test1 = new string(s?.ToArray());
        var test2 = Control?.Text;
    
        SpannableString spannableString = new SpannableString(s);
        BackgroundColorSpan backgroundSpan = new     BackgroundColorSpan(Color.Blue);
        spannableString.SetSpan(backgroundSpan, start, start + count, 
        SpanTypes.ExclusiveExclusive);
        var test3 = spannableString;
    
    }
    
  • 第二种方式:

    Control.BeforeTextChanged += (sender, args) =>
    {
    
        var test1 = new string(args?.Text.ToArray());
        var entry = sender as EditText;
        var test2 = entry?.Text;
        var test3 = Control?.Text; 
    
    };
    

但是他们都不会返回即将输入的文本。 我想要的是访问该文本,并且仅在某些情况下允许插入该文本。 我不想使用行为,因为它不适合我的需要。

1 个答案:

答案 0 :(得分:0)

第一种方式,ITextWatcher

 class MyEntryRenderer : EntryRenderer
    {
        public MyEntryRenderer() : base()
        {
        }

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

            if (Control != null)
            {
                Control.SetBackgroundColor(global::Android.Graphics.Color.LightGreen);
                Control.AddTextChangedListener(new MyTextWatcher());
            }
        }
    }
    class MyTextWatcher :Java.Lang.Object, ITextWatcher
    {

        public void AfterTextChanged(IEditable s)
        {
            Android.Util.Log.Error("lv", "afterTextChanged ---->" + s);

        }

        public void BeforeTextChanged(ICharSequence s, int start, int count, int after)
        {
            Android.Util.Log.Error("lv", "beforeTextChanged ----> s=" + s + "----start=" + start
          + "----after=" + after + "----count" + count);
        }


        public void OnTextChanged(ICharSequence s, int start, int before, int count)
        {
            Android.Util.Log.Error("lv", "onTextChanged ---->s=" + s + "----start=" + start
+ "----before=" + before + "----count" + count);
        }
    }

效果很好。

第二种方式,Control.BeforeTextChanged,它也运作良好。

  

它没有返回该文本

您在问题中提供的方法,它们在我的手机中都运行良好。请显示更多代码,以便我帮助您找到错误的地方。