在edittext中编写时,使文本变为粗体,斜体或下划线

时间:2017-03-09 05:26:47

标签: android html android-edittext

我希望我的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,但即使这样也没有用。 如果我尝试的工作不太容易理解,也会道歉,它是大型代码的一部分,因此有很多链接,我试图尽可能多地删除依赖项。

2 个答案:

答案 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"/>