我一直试图找到一个解决android长度格式为Spans的问题.我想,好吧,我只会删除长度为零的Spans.经过一番环顾,我认为SpanWatcher是一个很好的方法.但是,似乎缺乏关于如何实现或添加SpanWatchers的示例.
我在MonoDroid中试过这个:
public class PreventZeroLenSpan : Java.Lang.Object, ISpanWatcher
{
void ISpanWatcher.OnSpanAdded (ISpannable text, Java.Lang.Object what, int start, int end)
{
if (what==this) return;
var CS = what as Android.Text.Style.CharacterStyle;
if (CS==null) return;
if (start==end) text.RemoveSpan(CS);
}
void ISpanWatcher.OnSpanChanged (ISpannable text, Java.Lang.Object what, int ostart, int oend, int nstart, int nend)
{
if (what==this) return;
var CS = what as Android.Text.Style.CharacterStyle;
if (CS==null) return;
if (nstart==nend) text.RemoveSpan(CS);
}
void ISpanWatcher.OnSpanRemoved (ISpannable text, Java.Lang.Object what, int start, int end)
{ …Run Code Online (Sandbox Code Playgroud) 正在做一些搜索.我可以看到一个向TextView添加阴影图层的方法,但我只想隐藏一段文本.我基本上在做一个EditText,用户可以在其中更改文本选择的样式.其中一种风格是带有选择颜色的阴影.有颜色,大小,字体等的跨度,但我找不到阴影的东西.
基本上我想做类似的事情:(注意代码来自Mono Droid,但Java答案也会有所帮助)
var N = new ShadowSpan(color,dx,dy,radius); // no such thing?
int S = txEdit.SelectionStart;
int E = txEdit.SelectionEnd;
Str = new SpannableString(txEdit.TextFormatted);
Str.SetSpan(N,S,E, SpanTypes.InclusiveInclusive);
txEdit.SetText(Str, TextView.BufferType.Spannable);
txEdit.SetSelection(S,E);
Run Code Online (Sandbox Code Playgroud)
任何帮助或建议表示赞赏.我想知道我是否必须弄清楚如何从android.text.style.CharacterStyle派生我自己的ShadowSpan实现(可能在textPaint对象上覆盖updateDrawState()到setShadowLayer?)或者我可能只是错过了简单的答案?我不可能是唯一一个想要这样做的人,所以我想在尝试定制的东西之前我会先问一下.
- 编辑 -
我尝试创建自己的ShadowSpan,它似乎确实有效.如果有人有更好的解决方案,我仍然会开放.它似乎已经存在,但我想我不必做太多.
以下是我在Mono for Android中的内容
public class ShadowSpan : Android.Text.Style.CharacterStyle
{
public float Dx;
public float Dy;
public float Radius;
public Android.Graphics.Color Color;
public ShadowSpan(float radius, float dx, float dy, Android.Graphics.Color color)
{
Radius = radius; Dx = dx; Dy = dy; Color = …Run Code Online (Sandbox Code Playgroud)