标签: spannablestring

需要在 TextView 中居中对齐文本的单个部分

我目前正在使用 SpannableString 在单个 TextView 中格式化大块文本。大小和颜色的格式都很好,但我在对齐方面遇到了困难。

我发现这篇文章提供了有关对齐格式的指导,以及有关如何使用 AlignmentSpan 的Android 开发人员页面,但它似乎对我不起作用。Eclipse 没有显示任何错误,应用程序加载/运行得很好,但对齐部分似乎完全被忽略了。这是我的代码:

Spannable t = new SpannableString("Test Blue.");
t.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.color_blue)), 0, t.length()-1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
t.setSpan(new AbsoluteSizeSpan((int) getResources().getDimension(R.dimen.big_text)), 0, t.length()-1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
t.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 0, t.length()-1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text3.setText(t);
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

[编辑] 我还尝试注释掉颜色和大小 setSpans 以查看是否存在冲突,但没有运气。

[编辑2]:我将下面的答案标记为正确的,但正确的答案实际上隐藏在评论中。我无法将 TextView 的 XML 文件宽度更新为 match_parent(而不是 fill_content)。谢谢塞尔吉!

android alignment android-layout spannablestring

4
推荐指数
1
解决办法
3656
查看次数

如何在 Android 中将一种跨度类型更改为另一种类型?

我想在 a 中获取一种类型的所有跨度CharSequence并将它们转换为不同的类型。例如,将所有粗体跨度转换为下划线跨度:

在此处输入图片说明

我该怎么做?

(这是我今天面临的一个问题,既然我现在已经解决了,我在这里添加一个问答对。我的答案如下。)

android spanned spannablestring

4
推荐指数
1
解决办法
1240
查看次数

在SpannableStringBuilder中对齐位图

如何将位图与SpannableString中的文本对齐?

SpannableStringBuilder ssb = new SpannableStringBuilder(arr_messages.get(position));
String msg1 = ssb.toString();
for (int i=0; i<smileys.length; i++)
{   
        if (msg1.indexOf(smileys[i]) > 0)
        {
            int t = msg1.indexOf(smileys[i]);
            ssb.setSpan(new ImageSpan(bitmapArray.get(i)), t, t+2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
}
holder.txtName.setText(ssb, BufferType.SPANNABLE);
Run Code Online (Sandbox Code Playgroud)

我想用这些图片来证明这个问题:

我想要的是垂直居中文本和图像(文本没问题,但图像将其拧紧).

结果是: 在此输入图像描述

android spannablestring

3
推荐指数
1
解决办法
3486
查看次数

SpannableString第一次更改颜色,但在重用时不会

我正在努力制作一款游戏来帮助孩子们学习数学.我为代码编号,以便他们可以遵循逻辑.我还使用textView.append()来构建一个长字符串以放入活动中.

因为我在指令中重复使用相同的数字/符号,我想要一种方法来轻松回收SpannableStrings,但似乎我所做的更改在第一次正确应用,但此后有时工作,有时部分工作(例如正确的大小)/alignment,但颜色错误),或根本不工作.我正在混合这一切.我似乎无法在Stackoverflow或Google上的任何其他地方找到遇到类似问题的人.

这是我的代码(简化):

    // Declare static variables
    public static Spannable PLUS = new SpannableString("+ ");
    public static Spannable MINUS = new SpannableString("- ");
    public static Spannable TIMES = new SpannableString("X ");
    public static Spannable DIVIDED_BY = new SpannableString("/ ");
    public static Spannable EQUALS = new SpannableString("= ");

    // Function to color these strings.
    public void colorStrings() {
    makeBlack(PLUS);
    makeBlack(MINUS);
    makeBlack(TIMES);
    makeBlack(DIVIDED_BY);
    makeBlack(EQUALS);
    makeBlack(QMARK);
    }

    // Function that actually sets color, size, and alignment.
    public Spannable makeBlack(Spannable s) {s.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.color_black)), 0, …
Run Code Online (Sandbox Code Playgroud)

android textview spannablestring

3
推荐指数
2
解决办法
3682
查看次数

按钮上的SpannableString不适用于API21?

我尝试使用SpannableString在切换按钮上放置一个图标.并且在API17上工作,但在API21上没有.

按钮和文本上的spanable字符串

正如您所看到的,它适用于API17的Button和TextView,但仅在API21上使用TextView('Z'不替换为图标).

private SpannableStringBuilder createSpanIcon(int rid, String name){
    Drawable d = getActivity().getResources().getDrawable(rid);
    d.setBounds(0,0,20,20);
    ImageSpan imageSpan = new ImageSpan(d, DynamicDrawableSpan.ALIGN_BASELINE);
    SpannableStringBuilder builder = new SpannableStringBuilder();

        builder.append("Z\n")
               .append(name)
               .setSpan(imageSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        /* This give same result    
        builder.append("Z", imageSpan, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
               .append("RED", new ForegroundColorSpan(Color.RED), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
               .append("\n" + name);
        */

        return builder;
}
Run Code Online (Sandbox Code Playgroud)

    Button btn = (Button)v.findViewById(R.id.myButton);
    SpannableStringBuilder _test = createSpanIcon(R.drawable.tc_g, "Click Me!" );
    btn.setText( _test );

    TextView txt = (TextView)v.findViewById(R.id.myText);
    SpannableStringBuilder _test2 = createSpanIcon(R.drawable.tc_g, "I'm text" );
    txt.setText( _test2 );
Run Code Online (Sandbox Code Playgroud)

注意:我不想使用setCompoundDrawablesWithIntrinsicBounds …

android spannablestring android-5.0-lollipop

3
推荐指数
1
解决办法
1481
查看次数

查找EditText可编辑的getSpans开始和结束索引

我正在尝试将All Spans应用于文本,如下所示;

public String getTextWithTags(Editable e)
{

    StyleSpan[] ss = e.getSpans(0,e.length(),StyleSpan.class);
    ss[0].getSpanStart <--- ? This is the problem, no such function

    return "";
}
Run Code Online (Sandbox Code Playgroud)

但是没有索引查找功能来替换标签以将它们存储在数据库中,这样我可以在重新打开文本时检索所有跨度.如何从可编辑对象获得所有跨度位置?

java android android-edittext spannablestring

3
推荐指数
1
解决办法
1843
查看次数

带有 SpannableString 的 Android Canvas drawText

我做了一个自定义的View使用Canvas.drawText()得出一些SpannableString秒。

SpannableString.setSpan()在文本包含我制作的表情符号时调用(我不喜欢默认样式的表情符号)。我发现Canvas.drawText()它没有绘制我设置的跨度,而是绘制了默认样式的表情符号。我试图TextView.setText()通过相同的方式调用SpannableString它并且它有效。我想用来Canvas绘制文本以提高性能(否则,TextView在滚动时更新几个sListView会导致严重的性能问题)。怎样绘制SpannableStringCanvas

对不起,我的英语不好,我不是母语人士。感谢提前!

编辑:实际上我做了这个自定义View是为了显示文本转换的动画。几个文本将水平穿过屏幕。我遇到的问题是TextView's draw 方法导致时间太多,动画看起来很糟糕。所以我想直接使用Canvas. 可悲的是,我切换到StaticLayout并仍然发现动画很生涩。

android canvas spannablestring

3
推荐指数
1
解决办法
2219
查看次数

使用Span在Android EditText上突出显示语法吗?

我在中创建了用于突出显示语法的简单代码EditText。首先,我创建了一个HashMap存储关键字和颜色的文件。

                        Map<String,Integer> map = new HashMap<>();
                        map.put("public",Color.CYAN);
                        map.put("void", Color.BLUE);
                        map.put("String",Color.RED);
Run Code Online (Sandbox Code Playgroud)

然后,我添加了一个TextWatcherEditText。在afterTextChanged方法中,我使用以下代码为每个关键字设置颜色,

                        ........
                        @Override
                        public void afterTextChanged(Editable editable) {
                            String string = editable.toString();
                            String[] split = string.split("\\s");
                            for(int i = 0 ; i < split.length ; i++){
                                String s = split[i];
                                if(map.containsKey(s)){
                                    int index = string.indexOf(s);
                                    int color = map.get(s);
                                    editable.setSpan(new ForegroundColorSpan(color),
                                            index,
                                            index + s.length(),
                                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                                }

                            }
                        }
Run Code Online (Sandbox Code Playgroud)

如果我键入不同的词(例如“ public void String”),则此代码有效,但是当我键入相同的词“ public public public”时,此代码不起作用。它仅将颜色设置为第一个单词。

在此处输入图片说明

我该如何工作?谢谢。

java android syntax-highlighting spannablestring

3
推荐指数
2
解决办法
1946
查看次数

如何在包含不同大小文本的 TextView 中垂直居中文本?

我的布局中有一个 TextView,其中包含不同大小的文本: 在此处输入图片说明

这是通过 SpannableString 实现的:

SpannableString spannableString = new SpannableString("$20 Rewards");
    spannableString.setSpan(
            new AbsoluteSizeSpan(getResources().getDimensionPixelSize(R.dimen.textSize_16)), 0,
            3, 0);

    textView.setText(spannableString);
Run Code Online (Sandbox Code Playgroud)

我的问题是较小的文本不会垂直居中,如上图所示。我已经添加android:gravity="center_vertical"到 TextView,无济于事:

<TextView
    android:id="@+id/tv_hotel_rewards"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:background="@drawable/bg_dark_blue_partial_round"
    android:gravity="center_vertical"
    android:paddingBottom="4dp"
    android:paddingEnd="8dp"
    android:paddingStart="8dp"
    android:paddingTop="4dp"
    android:textColor="@color/white"
    android:textSize="@dimen/textSize_12"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tv_hotel_price"
    tools:text="$140 Rewards"/>
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何将其垂直居中,或者是否可以使用单个 TextView?

android textview spannablestring

3
推荐指数
1
解决办法
754
查看次数

如何在Android中为ImageSpan应用背景颜色?

我想在 Android 中动态应用图像范围的背景颜色。

您能提出一些想法吗?

android textview spannablestring imagespan android-spannable

3
推荐指数
1
解决办法
1639
查看次数