【问题标题】:Write text with style (Bold, italic) in Android EditText在 Android EditText 中使用样式(粗体、斜体)编写文本
【发布时间】:2017-06-23 21:02:12
【问题描述】:

我想在输入edittext时为文本赋予样式,例如使文本变为粗体或斜体。 我知道在输入和选择部分文本后如何在 spannable 的帮助下执行此操作,但我想在输入时执行此操作。 例如,单击粗体按钮后,我输入的所有内容都是粗体。 谁能给我一个提示如何做到这一点?

【问题讨论】:

  • 我建议您在询问之前先进行一些搜索并尝试一些代码,但我会给您一个提示。您可以使用 textView.setTypeface(null, Typeface.BOLD_ITALIC); textView.setTypeface(null, Typeface.BOLD); textView.setTypeface(null, Typeface.ITALIC); textView.setTypeface(null, Typeface.NORMAL);
  • @FadySaad 我知道怎么做,但这是在选择文本的一部分并使用这些方法使该部分变为粗体并再次设置文本之后。我想在打字时这样做。

标签: java android android-edittext textview


【解决方案1】:

您可以尝试在如下代码中执行此操作:

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

    }
});

在发短信的任何时候都可以这样做

【讨论】:

  • 感谢您的回答。但正如我提到的,我想在打字时这样做,而不是在那之后。
  • 我现在不知道你到底想要什么,但我编辑了我的答案,如果没有帮助,请告诉我,
【解决方案2】:

试试

android:textStyle="bold"

参考:Full Descriptoion

【讨论】:

    【解决方案3】:

    我也有同样的要求。我在 onTextChanged 方法中使用了 addTextChangedListener 并使用 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 看起来很复杂,但看起来很有希望。我还没实现呢。

    【讨论】:

      【解决方案4】:

      只需根据您的要求使用android:textStyle="bold""italic" 即可。如果您想在按下某个按钮后使其变为粗体或斜体。然后制作一个方法,在其中提到 edittext.setOnClickListener 之类的内容,并在其中使用编辑文本的 id 并使用 edittext.setTypeface(null, Typeface.BOLD); 属性

      【讨论】:

      • 考虑仔细阅读这个问题,他提到要在打字时加粗,而不是在单击按钮后!
      猜你喜欢
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 2013-11-06
      • 2020-07-28
      相关资源
      最近更新 更多