为什么Xamarin等效于EditText.getText()会返回一个字符串?

时间:2017-06-10 16:49:01

标签: java c# android xamarin xamarin.android

我是一名新的Xamarin.Android开发人员。我最近阅读了一些在派生类中使用EditText方法的Java代码。其中一个派生类'方法看起来像这样:

private void checkMatchingBracket(int paramInt)
{
    getText().removeSpan(this.openBracketSpan);
    getText().removeSpan(this.closeBracketSpan);
    ...
}

这使我感到困惑,因为我认为getText()返回了String,因为EditText.Text属性是此类“Xamarin”中的string。然而,这种情况并非如此;似乎getText()返回Editable,它看起来像一个可变的字符串类型,它提供了额外的功能,例如将“跨度”附加到文本的某些区域(SpannableString?)。我的猜测是string Xamarin返回已从此Editable的文本中复制过来,因此我无法真正修改原始Editable并使用其API。

我说错了吗?是否无法访问原始Editable,因为我正在使用Xamarin?

编辑:我要做的具体事情是EditText中文字的颜色区域。我发现this answer使用跨度来实现这一目标:

TextView textView = (TextView)findViewById(R.id.mytextview01);
Spannable WordtoSpan = new SpannableString("partial colored text");        
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(WordtoSpan);

但是,Xamarin的API EditText.Text.set只接受.NET string,它显然没有颜色或“跨度”的概念。

1 个答案:

答案 0 :(得分:5)

您正在寻找EditableText属性:

var editable = aTextView.EditableText;
editable?.RemoveSpan(aSpanObject);

回复:https://developer.xamarin.com/api/property/Android.Widget.TextView.EditableText/

  

返回TextView显示为可编辑对象的文本。如果文本不可编辑,则返回null。