Добавление дополнительного текста в растянутую строку избавляет от моего полужирного текста.


Я беру пользовательский ввод и добавляю этот текст в виде полужирного текста в поле edittext в диалоге оповещения. Проблема в том, что когда пользователь добавляет больше текста во второй, третий или четвертый раз (и т. д.), предыдущий жирный текст исчезает, и отображается только последний жирный текст. Помощь ценится, спасибо.

Вот мой код:

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 2

2 ответа:

Вы получаете строку, а не SpannableString из TextView, поэтому вы теряете форматирование.

В настоящее время у вас есть что-то вроде:

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

Эти строки кода делают текст, который у вас был на вашем TextView нормальным, а новый текст жирным, потому что вы просто используете теги <b> и </b> после storyText. Вот почему только новый текст выделен жирным шрифтом, а старый остается регулярным.

Измените код на:

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