如何在单个 editText 中添加多个 sytleSpan?
how to add multiple sytleSpan in single editText?
我正在使用 editText
和 buttons
,布局包含 四个 按钮
- btnBold
- btn斜体
- btnStrike
- btn下划线
和一个 editText
etDescription
现在,我在这里通过单击按钮
来设置我的 editText's selected text
样式
使用此代码
CharacterStyle styleBold, styleItalic, styleUnderline, styleStrike;
styleBold = new StyleSpan(Typeface.BOLD);
styleItalic = new StyleSpan(Typeface.ITALIC);
styleUnderline = new UnderlineSpan();
styleStrike = new StrikethroughSpan();
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnItalic:
makeIt(styleItalic);
break;
case R.id.btnBold:
makeIt(styleBold);
break;
case R.id.btnUnderline:
makeIt(styleUnderline);
break;
case R.id.btnStrike:
makeIt(styleStrike);
break;
}
}
private void makeIt(CharacterStyle characterStyle) {
String wholeTextUnder = etDescription.getText().toString();
int startu = etDescription.getSelectionStart();
int endu = etDescription.getSelectionEnd();
SpannableStringBuilder sbu = new SpannableStringBuilder(wholeTextUnder);
sbu.setSpan(characterStyle, startu, endu, 0);
etDescription.setText(sbu);
}
它给了我整个 editText
single style
就像我 select 文本 1-10 然后将其设为 粗体 一样!
但是,当我 select 其他文本然后将其改成 italic
、strike
、underline
之类的其他文本时,之前的文本变得正常并且新的更改成功。
我希望周围的文字也保持不变
等待答复!
提前致谢!!
编码愉快!
您的问题是当您调用 String wholeTextUnder = etDescription.getText().toString();
时您已经将其更改为 String
这意味着您设置的任何 Span
都将被清除。试试这个。
private void makeIt(CharacterStyle characterStyle) {
CharSequence wholeTextUnder = etDescription.getText();
int startu = etDescription.getSelectionStart();
int endu = etDescription.getSelectionEnd();
SpannableStringBuilder sbu = new SpannableStringBuilder(wholeTextUnder);
sbu.setSpan(characterStyle, startu, endu, 0);
etDescription.setText(sbu);
}
我正在使用 editText
和 buttons
,布局包含 四个 按钮
- btnBold
- btn斜体
- btnStrike
- btn下划线
和一个 editText
etDescription
现在,我在这里通过单击按钮
来设置我的editText's selected text
样式
使用此代码
CharacterStyle styleBold, styleItalic, styleUnderline, styleStrike;
styleBold = new StyleSpan(Typeface.BOLD);
styleItalic = new StyleSpan(Typeface.ITALIC);
styleUnderline = new UnderlineSpan();
styleStrike = new StrikethroughSpan();
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnItalic:
makeIt(styleItalic);
break;
case R.id.btnBold:
makeIt(styleBold);
break;
case R.id.btnUnderline:
makeIt(styleUnderline);
break;
case R.id.btnStrike:
makeIt(styleStrike);
break;
}
}
private void makeIt(CharacterStyle characterStyle) {
String wholeTextUnder = etDescription.getText().toString();
int startu = etDescription.getSelectionStart();
int endu = etDescription.getSelectionEnd();
SpannableStringBuilder sbu = new SpannableStringBuilder(wholeTextUnder);
sbu.setSpan(characterStyle, startu, endu, 0);
etDescription.setText(sbu);
}
它给了我整个 editText
single style
就像我 select 文本 1-10 然后将其设为 粗体 一样!
但是,当我 select 其他文本然后将其改成 italic
、strike
、underline
之类的其他文本时,之前的文本变得正常并且新的更改成功。
我希望周围的文字也保持不变
等待答复!
提前致谢!!
编码愉快!
您的问题是当您调用 String wholeTextUnder = etDescription.getText().toString();
时您已经将其更改为 String
这意味着您设置的任何 Span
都将被清除。试试这个。
private void makeIt(CharacterStyle characterStyle) {
CharSequence wholeTextUnder = etDescription.getText();
int startu = etDescription.getSelectionStart();
int endu = etDescription.getSelectionEnd();
SpannableStringBuilder sbu = new SpannableStringBuilder(wholeTextUnder);
sbu.setSpan(characterStyle, startu, endu, 0);
etDescription.setText(sbu);
}