我希望在编辑文本时能够给文本添加样式,比如加粗或斜体。 我知道可以使用Spannable在输入后选择部分文本来实现这个功能,但是我想在输入时就实现这个功能。 例如,在点击加粗按钮后,我输入的所有内容都会变成加粗字体。 有人能给我一些提示吗?
我希望在编辑文本时能够给文本添加样式,比如加粗或斜体。 我知道可以使用Spannable在输入后选择部分文本来实现这个功能,但是我想在输入时就实现这个功能。 例如,在点击加粗按钮后,我输入的所有内容都会变成加粗字体。 有人能给我一些提示吗?
您可以尝试在代码中这样做:
TextView textView=(TextView)findViewById(R.id.your_textView_id);
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0, spanString.length(), 0);
textView.setText(spanString);
您可以在按钮的单击监听器中尝试以下操作,以更改EditText内容并在此后使其无效:
您可以执行以下操作:
((EditText) mView.findViewById(R.id.your_edittext)).addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
通过这种方式,在短信过程中您可以随时完成此操作。
我有相同的需求。我使用了addTextChangedListener,并在onTextChanged方法中使用Html.fromHtml()来为文本设置样式,还删除了textChangeListener,并在文本被样式化后重新添加它,以防止无限循环。
binding.descriptionEditText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
Log.d(TAG, "beforeTextChanged: $s")
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
Log.d(TAG, "onTextChanged: called $s")
binding.descriptionEditText.removeTextChangedListener(this)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
binding.descriptionEditText.setText(
Html.fromHtml(
s.toString(),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
)
} else {
binding.descriptionEditText.setText(
Html.fromHtml(
s.toString()
)
)
}
//to bring cursor back to the end
binding.descriptionEditText.setSelection(binding.descriptionEditText.text.length)
binding.descriptionEditText.addTextChangedListener(this)
}
override fun afterTextChanged(s: Editable?) {
}
})
它有点能用,但如果我们打字太快或删除内容太快,它会出现延迟。 我发现了这个博客,看起来相当复杂,但似乎很有前途。我还没有实施它。
只需根据您的要求使用android:textStyle="bold"
或"italic"
即可完成。如果您想在按下某个按钮后使其变粗或斜体,则可以创建一个方法,在其中提及类似于edittext.setOnClickListener
的内容,并在其中使用编辑文本的ID和edittext.setTypeface(null, Typeface.BOLD);
属性。