我想在edittext中输入时给文本添加样式,例如make text bold或italic。 我知道在输入和选择部分文本后如何使用spannable,但我想在打字时这样做。 例如,在单击粗体按钮后,我输入的所有内容都是粗体。 任何人都可以向我暗示这是怎么做到的?
答案 0 :(得分:0)
您可以尝试在以下代码中执行此操作:
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) {
}
});
在发短信的任何时候你都可以这样做
答案 1 :(得分:0)
答案 2 :(得分:0)
我有同样的要求。我使用了 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?) {
}
})
虽然可以,但是如果我们键入得太快或删除任何内容太快,它就会滞后。 我发现这个blog看起来很复杂,但看起来很有希望。我还没有实现。
答案 3 :(得分:-2)
根据您的要求及其完成情况,使用android:textStyle="bold"
或"italic"
。如果你想在按下某个按钮后使其变为粗体或斜体。然后制作一个方法,在其中提及类似edittext.setOnClickListener
的内容,使用编辑文本的ID并使用edittext.setTypeface(null, Typeface.BOLD);
属性