在Android EditText中以样式(加粗、斜体)方式编写文本

4

我希望在编辑文本时能够给文本添加样式,比如加粗或斜体。 我知道可以使用Spannable在输入后选择部分文本来实现这个功能,但是我想在输入时就实现这个功能。 例如,在点击加粗按钮后,我输入的所有内容都会变成加粗字体。 有人能给我一些提示吗?


我建议你在提问之前先进行一些搜索和尝试编写代码,但我可以给你一个提示。你可以使用textView.setTypeface(null, Typeface.BOLD_ITALIC); textView.setTypeface(null, Typeface.BOLD); textView.setTypeface(null, Typeface.ITALIC); textView.setTypeface(null, Typeface.NORMAL); - Fady Saad
@FadySaad 我知道如何做到这一点,但这是在选择文本的一部分并使用这些方法使该部分加粗后,再设置文本。我想在输入时完成这个操作。 - Hamidreza Sahraei
4个回答

2
您可以尝试像这样在代码中实现:

您可以尝试在代码中这样做:

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) {

    }
});

通过这种方式,在短信过程中您可以随时完成此操作。


谢谢您的回答。但是正如我所提到的,我想在输入时完成这个操作,而不是之后再做。 - Hamidreza Sahraei
我不知道你想要什么,但我编辑了我的答案,如果没有帮助,请告诉我。 - Meikiem

0

尝试

android:textStyle="bold"

参考资料:完整描述


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?) {

            }

        })

它有点能用,但如果我们打字太快或删除内容太快,它会出现延迟。 我发现了这个博客,看起来相当复杂,但似乎很有前途。我还没有实施它。


-3

只需根据您的要求使用android:textStyle="bold""italic"即可完成。如果您想在按下某个按钮后使其变粗或斜体,则可以创建一个方法,在其中提及类似于edittext.setOnClickListener的内容,并在其中使用编辑文本的ID和edittext.setTypeface(null, Typeface.BOLD);属性。


请仔细阅读问题,他提到在键入时加粗而不是在按钮点击后加粗! - Hissaan Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接