在编辑文本中,用户应该选择他们键入的内容是粗体、斜体还是普通。在我的例子中,当用户选择粗体时,整个编辑文本变为粗体,如果用户再次选择斜体,则整个编辑文本变为斜体。当用户选择粗体输入时,它应该是粗体,当他选择斜体或普通时,他在那之后键入的单词应该是斜体或普通,而不是前一个粗体。此外,当我在编辑文本中打印输入时,即使以粗体显示,它也会正常打印。
我在底部有我的代码
<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());
}
});
我如何实现这一点?
发布于 2018-11-21 22:37:53
如果您想在文本视图中使用不同的字体样式,可以从HTML中进行设置。看看这篇文章:
Is it possible to have multiple styles inside a TextView?
因此,在您的例子中,您可以根据用户单击的内容将输入的文本保存为HTML格式,将<b>
设置为粗体,将<i>
设置为斜体,依此类推。
这也将帮助您在结果textView中打印它,因为您将从HTML打印它。
onclick编辑:为了解决所有文本变得粗体或斜体的问题,你必须编辑你的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的
此外,我还没有测试过它,所以我不确定它是否可以工作,但至少我认为它已经足够让我明白了。
发布于 2019-01-21 15:47:52
尝试将属性android:textStyle="bold|italic"
设置为特定xml文件中的EditText
https://stackoverflow.com/questions/53414053
复制相似问题