【问题标题】:Replace bold text from textview?从 textview 替换粗体文本?
【发布时间】:2014-10-02 19:32:54
【问题描述】:

有没有办法将我的数组中的粗体文本转移到我的第三个文本视图中?我已经通过为每个文本视图执行按钮单击将它从 XML 转移到我的第一个和第二个文本视图。我试图让我的第三个文本视图用粗体动物替换句子中的粗体字。我的第三个 textview 将每秒不断显示新组合,以便每次单击按钮更改动物或句子时,textview 都会显示新组合。

这是我的strings.xml

<string-array name="Sentences">
        <item>"The big <![CDATA[<b>This</b>]]> ate the worm"</item>
        <item>"The <![CDATA[<b>Is</b>]]> is strong"</item>
        <item>"Every <![CDATA[<b>Just</b>]]> can run"</item>
        <item>"I saw a <![CDATA[<b>A</b>]]>"</item>
        <item>"The <![CDATA[<b>Test</b>]]> was sleeping"</item>
    </string-array>

    <string-array name="Animals">
        <item>"<![CDATA[<b>Cow</b>]]>"</item>
        <item>"<![CDATA[<b>Sheep</b>]]>"</item>
        <item>"<![CDATA[<b>Dog</b>]]>"</item>
        <item>"<![CDATA[<b>Pig</b>]]>"</item>
        <item>"<![CDATA[<b>Chicken</b>]]>"</item>
    </string-array>

这是我的 main.java

package com.MyFirstApp.App1;

import java.util.Random;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Button;



public class Original extends Activity implements OnClickListener
    {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn_sentence = (Button) findViewById(R.id.btn_sentence );
        Button btn_animal = (Button) findViewById(R.id.btn_animal );

        final Random ran = new Random();
        final Resources res = getResources();
        final TextView text1 = (TextView) findViewById(R.id.sentencetext);
        final TextView text2 = (TextView) findViewById(R.id.animaltext);
        final TextView text3 = (TextView) findViewById(R.id.newsentencetext);


        btn_sentence .setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                String[] NewText = null;
                NewText = res.getStringArray(R.array.Sentences);
                String strRandom = NewText[ran.nextInt(NewText.length)];
                text1.setText(Html.fromHtml(strRandom));
            }
            });
        btn_animal .setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                String[] NewText2 = null;
                NewText2 = res.getStringArray(R.array.Animals);
                String strRandom2 = NewText2[ran.nextInt(NewText2.length)];
                text2.setText(Html.fromHtml(strRandom2));
            }
            });

        Thread t = new Thread() {

              @Override
              public void run() {
                try {
                  while (!isInterrupted()) {
                    Thread.sleep(1);
                    runOnUiThread(new Runnable() {
                      @Override
                      public void run() {



                          String str = Html.fromHtml(text1).toString();
                          String str2 = text2.getText().toString();
                          str = str.replaceAll("<![CDATA[<b></b>]]>", str2);
                          text3.setText(Html.fromHtml(str));

                      }
                    });
                  }
                } catch (InterruptedException e) {
                }
              }
            };

            t.start();}

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }}

这就是我遇到问题的地方

 String str = Html.fromHtml(text1).toString();
 String str2 = text2.getText().toString();
 str = str.replaceAll("<![CDATA[<b></b>]]>", str2);
 text3.setText(Html.fromHtml(str));

我似乎无法从第一个 textview 或第二个 textview 获取粗体文本。 比如

`String str2 = text2.getText().toString();` 

只返回第二个文本视图中的文本,但它不像我需要的那样粗体。在我解决这个问题后,我希望我可以使用这条线

str = str.replaceAll("<![CDATA[<b></b>]]>", str2);

用新的粗体动物替换旧的粗体文本。

非常感谢您的帮助

 ~TylerNormal

【问题讨论】:

    标签: java android string replace bold


    【解决方案1】:

    你可以尝试这样的事情来构建粗体混合字符序列

        TextView tv = (TextView) findViewById(R.id.txt);
        SpannableStringBuilder b = new SpannableStringBuilder();
        b.append("hello ");
        String boldData = "bold Data";
        int startix = b.length();
        int len = boldData.length();
        b.append(boldData);
        b.setSpan(new StyleSpan(Typeface.BOLD), startix, startix + len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(b);
    

    【讨论】:

    • 唯一的问题是我不能只附加粗体文本,我必须用我的第二个文本视图中的粗体文本替换我的第一个文本视图中的粗体文本并将其显示在我的第三个文本视图中
    • 如果我能做这样的代码... String str2 = text2.getText(fromHtml).toString();它可能会起作用
    猜你喜欢
    • 2017-12-18
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2013-01-10
    • 2011-03-09
    相关资源
    最近更新 更多