标签: spannablestring

使用bulletspan时的Incorect换行

我现在试图解决我的问题2天,但没有任何成功.

问题是:当我将BulletSpan设置为文本然后在EditText中显示时,一切正常,直到我开始输入另一个文本.当文本被包裹在屏幕的末尾时,缩进工作但光标指向实际位置,并且光​​标之后还添加了前一行中的一些字符.为了更好地说明此问题,请参阅附图.

跨度错误

还值得一提的是,只有当我输入文本时才会发生这种情况,当我在源文本中设置文本并且文本太长而不能只在一行上时,包装工作正常并且没有添加额外的字符也没有添加光标位置是错的.

我也试过LeadingMarginSpan.Standart,行为是一样的.

在代码我设置开始标记:

private void handleListStart(SpannableStringBuilder text) {
    int len = text.length();
    text.setSpan(new ListItem(), len, len, Spannable.SPAN_MARK_MARK);
}
Run Code Online (Sandbox Code Playgroud)

然后设置范围:

private void handleListEnd(SpannableStringBuilder text) {
    int len = text.length();
    Object obj = getLast(text, ListItem.class);
    int where = text.getSpanStart(obj);

    text.removeSpan(obj);

    if (where != len) {
        text.setSpan(new BulletSpan(listIndent * 15), where, len, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }
}
Run Code Online (Sandbox Code Playgroud)

我从xml文件中获取数据.

谢谢你的帮助

编辑:我忘了补充一点,我在Android 4.1和4.4上尝试了这一点,两者表现相同

android text textedit spannablestring

7
推荐指数
1
解决办法
589
查看次数

ForegroundColorSpan 不适用于 ReplacementSpan

我正在尝试利用 ReplacementSpans 来格式化 EditText 字段中的输入(不修改内容):

public class SpacerSpan extends ReplacementSpan {
    @Override
    public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
        return (int) paint.measureText(text.subSequence(start,end)+" ");
    }
    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
        canvas.drawText(text.subSequence(start,end)+" ", 0, 2, x, y, paint);
    }
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作,并在跨越部分后增加间距。但是,如果我还应用了 ForegroundColorSpan,则不会为跨区部分设置颜色:

EditText edit = (EditText) findViewById(R.id.edit_text);

SpannableString content = new SpannableString("1234567890");

ForegroundColorSpan fontColor = new ForegroundColorSpan(Color.GREEN);
SpacerSpan spacer …
Run Code Online (Sandbox Code Playgroud)

android spannablestring

7
推荐指数
1
解决办法
1424
查看次数

如何制作我的自定义 ReplacementSpan 包装?

我正在尝试将带边框的背景应用于TextView. ABackgroundColorSpan很好用,但它没有边框。为了获得边框,我改为使用 customReplacementSpan和 override draw。它看起来很适合短词/句子,但它无法换行。如何制作我的自定义ReplacementSpan包装?

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_replacement_span);

    final Context context = this;
    final TextView tv = (TextView) findViewById(R.id.tv);


    Spannable span = Spannable.Factory.getInstance().newSpannable("Some long string that wraps");
    //Works great, but no border:
    //span.setSpan(new BackgroundColorSpan(Color.GREEN), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    //Has border, but doesn't wrap:
    span.setSpan(new BorderedSpan(context), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    tv.setText(span, TextView.BufferType.SPANNABLE);
}


public static class BorderedSpan extends ReplacementSpan {
    final Paint mPaintBorder, mPaintBackground;
    int mWidth;
    Resources r;
    int …
Run Code Online (Sandbox Code Playgroud)

android spannablestring

7
推荐指数
0
解决办法
1224
查看次数

降低ImageSpan的高度和宽度

我将Image Drawable设置为Textn的SpannableString,但图像比文本更大,使它看起来很奇怪.我需要减小imagespan的大小,使其与文本的高度相同:

这是我尝试过的:

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

SpannableStringBuilder builder = new SpannableStringBuilder(holder.temptext.getText());
builder.setSpan(new ImageSpan(drawable), selectionCursor - ":)".length(), selectionCursor, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.temptext.setText(builder);
holder.temptext.setSelection(selectionCursor);

holder.caption.setText(builder);
Run Code Online (Sandbox Code Playgroud)

android textview android-layout spannablestring imagespan

7
推荐指数
1
解决办法
3955
查看次数

Android开发:如何用Spannable替换EditText的一部分

我正在尝试用span来替换从getText()返回的可编辑部分.

我尝试过getText().replace(),但这只适用于CharSequences.

我试图这样做的原因是我可以一个接一个地突出显示EditText的部分(经过一小段延迟),而不是通过并突出显示整个EditText(对于大文件来说可能很慢).

有没有人知道我将如何做到这一点?

android replace spannablestring spannable

6
推荐指数
1
解决办法
2万
查看次数

如何在TextView文本中为单词设置自定义字体

我想为一个单词设置自定义字体,该单词出现在字符串中的任何位置.

例:海@abc你好吗?亲爱的朋友你好,你在哪里@abc

在上面的例子中,我必须为"abc"应用自定义字体.我尝试过Spannable类,但我无法得到它.

final TextView txtComments = (TextView)view.findViewById(R.id.tv_comments);  
SpannableStringBuilder SS = new SpannableStringBuilder(alcomments.get(i));
SS.setSpan (new CustomTypefaceSpan("", tf), 0, SS.length(),Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
txtComments.setText(SS);
Run Code Online (Sandbox Code Playgroud)

但它影响整个字符串.请指导我如何实现它.

android textview custom-font spannablestring

6
推荐指数
1
解决办法
2064
查看次数

如何在TextView的文本上设置多个跨距(可单击和粗体)

    mSpannableString = new SpannableString("12:00PM");

    mSpannableString.setSpan(clickableSpan, 0, 7, 0);
    mSpannableString.setSpan(new StyleSpan(Typeface.BOLD), 0, 7, 0);

    TextView textView = new TextView(getContext());
    textView.setMovementMethod(LinkMovementMethod.getInstance());
    textView.setText(mSpannableString);

    mCancelFrom.setText(getString(R.string.cancel_from_text) + " " + mSpannableString);
Run Code Online (Sandbox Code Playgroud)

我需要将文本设置为粗体并使其可单击.上面的代码我写在一个对话框中.字符串"12:00 PM"正在显示.但它没有大胆的效果,也无法点击.你能用这个帮我吗?

android spannablestring

6
推荐指数
1
解决办法
1482
查看次数

颤振 - 跨度不能为零长度

我正在开发一个 Flutter 应用程序,它使用 Textfield.

我声明TextField如下:

new TextField(
  controller : _controller,
  decoration : new InputDecoration(
      hintText: 'Message...'
  )
)
Run Code Online (Sandbox Code Playgroud)

TextField显示在我的窗口小部件,但是当我在上面敲击时,键盘会自动关闭,以下错误出现在控制台

E/SpannableStringBuilder(17860): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
Run Code Online (Sandbox Code Playgroud)

我在 Android(三星 Galaxy Grand Prime,Android 5.1)上使用 IntelliJ 中的 Flutter 插件运行它。

我怎么能解决这个问题?

编辑:正如在这个答案中看到的(Android - SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能为零长度),我试过切换键盘(谷歌和三星),仍然相同

android spannablestring flutter

6
推荐指数
1
解决办法
5959
查看次数

Linkify.addLinks与Span无法正常工作

我有自动链接的textview,但每当我将自定义范围(ClickableSpan)添加到textview时,它自动链接到网址和手机号码无效.有没有简单的方法来解决这个问题.应用样式但单击不起作用.

android textview spannablestring autolink clickablespan

6
推荐指数
1
解决办法
630
查看次数

SpannableString 不适用于 Android 单元测试

我尝试在单元测试中比较两个 SpannableStrings 文本,但收到错误:

java.lang.RuntimeException: Method toString in android.text.SpannableString not mocked. See http://g.co/androidstudio/not-mocked for details.
Run Code Online (Sandbox Code Playgroud)

调试后,我验证在单元测试中根本无法使用 SpannableString 类。

测试实施:

java.lang.RuntimeException: Method toString in android.text.SpannableString not mocked. See http://g.co/androidstudio/not-mocked for details.
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

java.lang.RuntimeException: Method toString in android.text.SpannableString not mocked. See http://g.co/androidstudio/not-mocked for details.

at android.text.SpannableString.toString(SpannableString.java)
at java.lang.String.valueOf(String.java:2994)
at view_model.ViewModelTest$When getCredits() returns multiple invites$1.invokeSuspend(ViewModelTest.kt:113)
at ViewModelTest$When getCredits() returns multiple invites$1.invoke(ViewModelTest.kt)
at kotlinx.coroutines.test.TestBuildersKt$runBlockingTest$deferred$1.invokeSuspend(TestBuilders.kt:50)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.test.TestCoroutineDispatcher.dispatch(TestCoroutineDispatcher.kt:50)
at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:305) ...
Run Code Online (Sandbox Code Playgroud)

showInvitesTextValue 变量初始化时发生错误。

如何在单元测试中使用 SpannableString 类?

testing android unit-testing spannablestring kotlin

6
推荐指数
0
解决办法
1262
查看次数