在编辑文本中,用户应选择输入的内容是粗体、斜体还是普通。在我的情况下,当用户选择粗体时,整个编辑文本将更改为粗体,如果他再次选择斜体,则整个编辑文本将变为斜体。当用户选择粗体键入某些内容时,它应该是粗体,当他选择斜体或普通时,他之后键入的单词应该是斜体或普通,而不是前一个粗体。另外,当我在编辑文本中打印输入时,即使它以粗体显示,它也会正常打印。
我的代码在底部
<EditText
android:id="@+id/check_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="check"
/>
这是我将编辑文本设置为粗体或斜体的地方
bold.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editCheck.setTypeface(editCheck.getTypeface(), Typeface.BOLD);
}
});
italics.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editCheck.setTypeface(editCheck.getTypeface(), Typeface.ITALIC);
}
});
normal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editCheck.setTypeface(editCheck.getTypeface(), Typeface.NORMAL);
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(editCheck.getText().toString());
}
});
我该如何实现这个
最佳答案
如果您希望在 TextView 中使用不同的字体样式,您可以从 HTML 进行设置。看看这篇文章:
Is it possible to have multiple styles inside a TextView?
因此,在您的情况下,您可以根据用户单击的内容保存以 HTML 格式输入的文本 <b>
对于粗体,<i>
斜体等。
这也将帮助您在结果 TextView 中打印它,因为您将从 HTML 中打印它。
编辑:为了解决所有文本都变成粗体或斜体的问题,您必须编辑 onclick 事件以了解您所写内容的类型。还可以使用 TextWatcher 来了解插入的文本是什么。例如:
int typeFaceSelected = Typeface.NORMAL //private global var with NORMAL as default value
String resultedText = ""; //private global var, this will give to your textview the result of the edittext in HTML
bold.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
typeFaceSelected = Typeface.BOLD
}
});
italics.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
typeFaceSelected = Typeface.ITALIC
}
});
normal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
typeFaceSelected = Typeface.NORMAL
}
});
//You can edit the text you add
editCheck.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
String sAux = s.toString().subString(start, start + count);
switch(typeFaceSelected)
{
case Typeface.NORMAL:
resultedText = sAux;
break;
case Typeface.ITALIC:
resultedText = "<i>" + sAux + "</i>";
break;
case Typeface.BOLD:
resultedText = "<b>" + sAux + "</b>";
break;
}
editCheck.setText(Html.fromHtml(resultedText));
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(HTML.fromHTML(resultedText));
}
});
上面的代码是基于这个Differences between TextWatcher 's onTextChanged, beforeTextChanged and afterTextChanged
另外,我还没有测试过它,所以我不确定它是否有效,但至少我认为这足以理解这个想法。
关于java - edittext 中的粗体和斜体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414053/