标签: spannablestring

文本末尾有额外的换行符

使用此方法设置文本后,我似乎得到了一些额外的换行符TextView

message.setText(Html.fromHtml( message ));
Run Code Online (Sandbox Code Playgroud)

我怎样才能删除这些?它们导致我的布局扭曲,因为它在输出中添加了两条额外的行。

该字符串已通过以下方式保存到我的 sqlite 数据库中Html.toHtml( editText.getText() ).trim();

初始字符串输入:hello

消息变量的日志输出:<p dir="ltr">hello</p>

android textview spannablestring

5
推荐指数
1
解决办法
2363
查看次数

indexoutofboundException :setSpan (2...2) 结束长度超出长度 1

我有一个MultiAutoCompleteTextView自定义控件,当用户按空格键时,我将在其中创建芯片文本。

我不希望用户在文本框为空时最初输入空格,因此我放置了一个inputFilter以防止用户最初输入空格。

这是过滤器代码:

private void RestrictUselessSpaces(){
    InputFilter filter = new InputFilter() { 

        public CharSequence filter(CharSequence source, int start, int end, 
Spanned dest, int dstart, int dend) { 

            for (int i = start; i < end; i++) { 
                if (Character.isWhitespace(source.charAt(i))) { 

                    if(!getText().toString().trim().equals(""))
                    {
                        return " "; 
                    }
                    else
                    {
                        return "";
                    }
                } 
        } 
        return null; 
        } 
};  

    setFilters(new InputFilter[]{filter});
}
Run Code Online (Sandbox Code Playgroud)

不知怎的,当我评论RestrictUselessSpaces功能。效果很好。但是当这个函数运行时。如果我尝试在字符后输入空格。它给了我indexoutofboundexception错误。这是我收到错误的代码。

public void setChips(String s){

    if(s.contains(" ") && !s.trim().equals("")) // check space …
Run Code Online (Sandbox Code Playgroud)

java android spannablestring

5
推荐指数
1
解决办法
7816
查看次数

Android EditText:撰写时如何应用跨度?

当用户撰写时,如何在 EditText 文本上应用跨度?

例如,用户在撰写时激活了“粗体”,因此此后输入的每个字符都应该是粗体

我考虑过向 EditText 添加文本更改侦听器并在用户撰写时更新文本,但我想知道是否有更好的方法来执行此操作。

android android-edittext spannablestring spannable

5
推荐指数
1
解决办法
6624
查看次数

如何在 Android 的 TextView 中的文本下方添加红色波浪线

我正在尝试在文本中的错误下方添加红色波浪线,例如:

在此处输入图片说明

不幸的是,我找不到合适的 *Span 类来包装错误文本。

我应该如何在 Android 中实现这样的功能?

android spannablestring

5
推荐指数
2
解决办法
1146
查看次数

在棒棒糖上断开的 TextView fromHtml 链接

我们的应用程序有几个 TextViews 实例,其内容设置myTv.setText(Html.fromHtml());为适用于 Android 4.4.0 及更低版本。

从 4.4.2 和 Lollypop 开始,这些链接已停止工作。文本仍然带有下划线和超链接颜色,但点击它们不会产生任何结果。

不得不说,这些字段被标记为可复制粘贴的,众所周知,它与这些可生成对象有交互。

有没有人能够解决这个问题?

android spannablestring

5
推荐指数
1
解决办法
1302
查看次数

在字符级别更改 EditText 中的前导/行高

我在 EditText 的开头和结尾实施了粗体、大、不可编辑的“智能引号”:

在此处输入图片说明

引号是文本的不可选择部分,我在其上设置了RelativeSizeSpan(2f). 结果几乎是我想要的。

s.setSpan(spanLeft, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
s.setSpan(spanRight, s.length() - 1, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

但是,正如您所看到的,更大的字体会导致更大的高度,从而影响整行。这在第一行是无关紧要的,但在最后一行却令人不快。我想知道这两个字符是否有可能保持字体大小但降低行高。

在此处输入图片说明

我想减少前导部分,以便第一行和最后一行与段落的其余部分具有一致的高度。我最大的愿望是将引号转换为基线,同时保持其外观。

你有什么建议吗?这是可能的Span吗?我应该放弃吗?你看到任何解决方法吗?

我看到我可以用引号创建两个 png 并使用ImageSpan(虽然我从未使用过它并且不知道它是如何工作的),但这对我来说有点烦人(我不是很喜欢图形)。

android android-layout android-edittext spannablestring

5
推荐指数
1
解决办法
927
查看次数

Android:使用 Spannable 将带有项目符号的文本放入 TextView

我需要用几种语言写一些文本。文本看起来像:

标题

另一个标题

项目符号的颜色与其他文本不同。

我听说过Spannablein Android,但不幸的是我只能使用spanwithfromendint 值。问题在于,在不同的语言中,我的单词会有不同的位置,因此可跨文本不适合我。你能帮我以简单的方式解决这个问题吗?

android textview spannablestring

5
推荐指数
1
解决办法
3283
查看次数

Android - 使用ReplacementSpan为SpannableStringBuilder添加保证金

我正在尝试在TextView/EditText中格式化Hashtags(比如Material Design Specs中提到的Chips).我可以使用格式化背景ReplacementSpan.但问题是我无法增加TextView/EditText中的行间距.见下图 在此输入图像描述

问题是如何为主题标签添加顶部和底部边距?

这是我在文本中添加背景的代码:

   /**
     * First draw a rectangle
     * Then draw text on top
     */
    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
        RectF rect = new RectF(x, top, x + measureText(paint, text, start, end), bottom);
        paint.setColor(backgroundColor);
        canvas.drawRoundRect(rect, CORNER_RADIUS, CORNER_RADIUS, paint);
        paint.setColor(textColor);
        canvas.drawText(text, start, end, x, y, paint);
    }
Run Code Online (Sandbox Code Playgroud)

android hashtag spannablestring android-chips

5
推荐指数
2
解决办法
1871
查看次数

如何格式化字符串然后通过注释更改样式

我有 3 个字符串本地化

<string name="tests" formatted="true">Test<annotation font="bold"> testBold %1$s</annotation> end</string>
<string name="tests" formatted="true">????<annotation font="bold"> ???????? %1$s</annotation> ?????</string>
<string name="tests" formatted="true">????<annotation font="bold"> ???????? %1$s</annotation> ??????</string>
Run Code Online (Sandbox Code Playgroud)

我如何通过注释添加一些参数和修改后的文本。我得到的最大的是做这件事

CharSequence t = getResources().getString(R.string.tests, "myValue");//in this case i lose my annotation, but set my argument
//OR
CharSequence t = getText(R.string.tests);//in this case i lose my argument but get style BOLD

public SpannableString textFormattingByTags(CharSequence t) {
        SpannedString titleText = new SpannedString(t);
        SpannedString titleText = (SpannedString) getText(R.string.tests);
        Annotation[] annotations = titleText.getSpans(0, titleText.length(), Annotation.class);
        SpannableString spannableString = new …
Run Code Online (Sandbox Code Playgroud)

android spanned spannablestring

5
推荐指数
2
解决办法
1424
查看次数

如何在 Android UnitTests 中使用 SpannableString

我只是偶然发现了一个问题,我还没有找到解决方案,所以我想我会问你:)

假设我有以下方法(Kotlin):

fun getValue(): SpannableString {

    val value = "MyTestValue"
    val subString = "Test"

    // init spannable string
    val spannableString = SpannableString(value)

    // get position of substring
    val position = value.indexOf(subString)

    // insert span
    spannableString.setSpan(BackgroundColorSpan(ContextCompat.getColor(context, R.color.yellow)), position, position + subString.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

    // return result
    return spannableString
}
Run Code Online (Sandbox Code Playgroud)

这是我的单元测试方法:

@Test
fun `value | on filter | returns correct value`() {

    // define mock behavior
    val model = TestUtils.getTestModel() //returns a test model

    // init Observable
    val observable = TestObservable(model)

    // check …
Run Code Online (Sandbox Code Playgroud)

testing android unit-testing spannablestring

5
推荐指数
0
解决办法
1819
查看次数