在Android EditText中使用样式(粗体,斜体)编写文本

时间:2017-06-23 21:02:13

标签: java android android-edittext textview

我想在edittext中输入时给文本添加样式,例如make text bold或italic。 我知道在输入和选择部分文本后如何使用spannable,但我想在打字时这样做。 例如,在单击粗体按钮后,我输入的所有内容都是粗体。 任何人都可以向我暗示这是怎么做到的?

4 个答案:

答案 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)

尝试

android:textStyle="bold"

参考:Full Descriptoion

答案 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);属性