Добавление дополнительного текста в растянутую строку избавляет от моего полужирного текста.
Я беру пользовательский ввод и добавляю этот текст в виде полужирного текста в поле 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 ответа:
Вы получаете строку, а не 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);