我希望我的editText能够以粗体,斜体和正常文本下划线写入文本。
例如:
天气 很好 今天。
我知道我可以使用html标签,但我想在编辑文本中写一下这些操作。
我尝试过:
//here textEdits is my model to store the string. As I have multiple editTexts in the activity.
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
if(isBold){
String textsequence = textEdits.get(position).getTextString();
if(i > 0){
String sequence = charSequence.subSequence(0, i).toString() +"<b>"+ charSequence.subSequence(i,i+i3).toString() + "</b>";
textEdits.get(position).setTextString(sequence.toString());
editTextcurrrent.setText(Html.fromHtml(sequence.toString()));
editTextcurrrent.setSelection(i+i3);
}
}
}
else {
textEdits.get(position).setTextString(charSequence.toString());
}
}
}
问题: charSequence返回一个没有html标签的字符串,所以,一旦你设置了值,下次你将得到一个没有html标签的字符串,因此你无法跟踪以前的html编辑。
除此之外,我尝试过Typeface,但即使这样也没有用。 如果我尝试的工作不太容易理解,也会道歉,它是大型代码的一部分,因此有很多链接,我试图尽可能多地删除依赖项。
答案 0 :(得分:1)
您将需要使用SpannableString:
String yourString = "The weather is nice today."
SpannableString contentSpan = new SpannableString(yourString);
contentSpan.setSpan(new TextAppearanceSpan(activity, R.style.bold_style), weatherFirstPos, weatherLastPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
contentSpan.setSpan(new TextAppearanceSpan(activity, R.style.italic_style), niceFirstPos, niceLastPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editTextcurrrent.setText(contentSpan, TextView.BufferType.SPANNABLE);
对于R.style.bold_style和italic_style,您可以使用以下内容:
<style name="bold_style">
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/black</item>
</style>
weatherFirstPos,weatherLastPos,niceFirstPos和niceLastPos是您要应用样式的位置:
int weatherFirstPos = yourString.indexOf("weather");
int weatherLastPos = weatherFirstPos + "weather".length();
答案 1 :(得分:-1)
使用OnFocusChange Listener&amp;当EditText获得用户焦点时,您可以根据需要更改EditText属性
或
你也可以用Xml粗体和斜体设置。
<EditText
android:id="@+id/edittext"
android:layout_margin="@dimen/activity_horizontal_margin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold|italic"
android:text="enter your name"/>