代码之家  ›  专栏  ›  技术社区  ›  sanic

向“跨度字符串”添加其他文本可以消除粗体文本。

  •  2
  • sanic  · 技术社区  · 10 年前

    我接受用户输入,并将该文本作为粗体文本添加到警报对话框的编辑文本框中。问题是,当用户第二次、第三次或第四次添加更多文本时(等等),先前的粗体文本将消失,只有最新的粗体文本显示。感谢您的帮助。

    这是我的代码:

    newField.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                storyText = story.getText().toString();
    
    
                AlertDialog.Builder builder = new AlertDialog.Builder(
                        getActivity());
                builder.setTitle("Title");
    
                // Set up the input
                final EditText input = new EditText(getActivity());
                input.setHint("Ex: Noun, Verb, Color, etc");
                // Specify the type of input expected; this, for example, sets
                // the input as a password, and will mask the text
                builder.setView(input);
    
                // Set up the buttons
                builder.setPositiveButton("Add Field",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                int y;
                                for(int i = 0; i < 200; i++)
                                {
                                    field[i] = "";
                                }
                                for(y = 0; y < 200; y++)
                                {
                                    if(field[y].equals(""))
                                    {
                                        field[y] = input.getText().toString();
                                        break;
                                    }
                                }
    
    
                                storyText = storyText + " " + "<b>" + field[y] + "</b>" + " ";
                                storyText.replaceAll("\n", "<br />");
                                spanned = Html.fromHtml(storyText);
                                story.setText(spanned);
    
                                Toast.makeText(
                                        getActivity().getApplicationContext(),
                                        "Field Added", Toast.LENGTH_SHORT).show();
                            }
                        });
                builder.setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                dialog.cancel();
                            }
                        });
    
                builder.show();
    
    
            }
        });
    
    2 回复  |  直到 10 年前
        1
  •  3
  •   tabjsina    10 年前

    您从TextView中获取的是String而不是SpannableString,因此正在丢失格式。

    目前您有以下内容:

    String storyText = story.getText().toString();
    // ...
    storyText = storyText + " " + "<b>" + field[y] + "</b>" + " ";
    storyText.replaceAll("\n", "<br />");
    spanned = Html.fromHtml(storyText);
    story.setText(spanned);
    

    但您可能需要尝试以下操作:

    SpannableString spannedStoryText = new SpannableString(story.getText());
    // ...
    String additionalStoryText = " " + "<b>" + field[y] + "</b>" + " ";
    additionalStoryText.replaceAll("\n", "<br />"); // assuming you only want this for the appended text.
    spannedStoryText = new SpannableString(TextUtils.concat(spannedStoryText, Html.fromHtml(additonalStoryText)));
    story.setText(spannedStoryText);
    
        2
  •  0
  •   joao2fast4u    10 年前
     storyText = storyText + " " + "<b>" + field[y] + "</b>" + " ";
                            storyText.replaceAll("\n", "<br />");
                            spanned = Html.fromHtml(storyText);
                            story.setText(spanned);
    

    这些代码行使您的 TextView normal和新文本加粗,因为您正在使用 <b> </b> 之后的标记 storyText 。这就是为什么只有新文本是粗体的,而旧文本保持规则的原因。

    将代码更改为:

     storyText = "<b>" + storyText + "</b> "+ " " + "<b>" + field[y] + "</b>" + " ";
                            storyText.replaceAll("\n", "<br />");
                            spanned = Html.fromHtml(storyText);
                            story.setText(spanned);