java - edittext 中的粗体和斜体

标签 java android xml

在编辑文本中,用户应选择输入的内容是粗体、斜体还是普通。在我的情况下,当用户选择粗体时,整个编辑文本将更改为粗体,如果他再次选择斜体,则整个编辑文本将变为斜体。当用户选择粗体键入某些内容时,它应该是粗体,当他选择斜体或普通时,他之后键入的单词应该是斜体或普通,而不是前一个粗体。另外,当我在编辑文本中打印输入时,即使它以粗体显示,它也会正常打印。

我的代码在底部

<EditText
    android:id="@+id/check_edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="check"
    />

这是我将编辑文本设置为粗体或斜体的地方

bold.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        editCheck.setTypeface(editCheck.getTypeface(), Typeface.BOLD);
    }
});
italics.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        editCheck.setTypeface(editCheck.getTypeface(), Typeface.ITALIC);
    }
});
normal.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        editCheck.setTypeface(editCheck.getTypeface(), Typeface.NORMAL);
    }
});
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        result.setText(editCheck.getText().toString());
    }
    });

我该如何实现这个

最佳答案

如果您希望在 TextView 中使用不同的字体样式,您可以从 HTML 进行设置。看看这篇文章:

Is it possible to have multiple styles inside a TextView?

因此,在您的情况下,您可以根据用户单击的内容保存以 HTML 格式输入的文本 <b>对于粗体,<i>斜体等。

这也将帮助您在结果 TextView 中打印它,因为您将从 HTML 中打印它。

编辑:为了解决所有文本都变成粗体或斜体的问题,您必须编辑 onclick 事件以了解您所写内容的类型。还可以使用 TextWatcher 来了解插入的文本是什么。例如:

int typeFaceSelected = Typeface.NORMAL //private global var with NORMAL as default value
String resultedText = ""; //private global var, this will give to your textview the result of the edittext in HTML
bold.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        typeFaceSelected = Typeface.BOLD
    }
});
italics.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        typeFaceSelected = Typeface.ITALIC
    }
});
normal.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        typeFaceSelected = Typeface.NORMAL
    }
});

//You can edit the text you add
editCheck.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {}

        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            String sAux = s.toString().subString(start, start + count);

            switch(typeFaceSelected)
            {
                case Typeface.NORMAL:
                    resultedText = sAux;
                break;
                case Typeface.ITALIC:
                    resultedText = "<i>" + sAux + "</i>";
                break;
                case Typeface.BOLD:
                    resultedText = "<b>" + sAux + "</b>";
                break;
            }
            editCheck.setText(Html.fromHtml(resultedText));
        }
});

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        result.setText(HTML.fromHTML(resultedText));
    }
    });

上面的代码是基于这个Differences between TextWatcher 's onTextChanged, beforeTextChanged and afterTextChanged

另外,我还没有测试过它,所以我不确定它是否有效,但至少我认为这足以理解这个想法。

关于java - edittext 中的粗体和斜体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414053/

相关文章:

java - 从 Firebase 中删除共享同一个子项的多个数据 - Java - orderByKey

java - 在 dom 树的第一个 child 之前添加一个新节点

java - Dom 解析器不工作 - 显示的输出全部为空

Android Studio 找不到颜色样式资源

Java表无法实例化

java.lang.NoClassDefFoundError : org/apache/spark/Logging 错误

VSCode 中的 Java VMOptions

android - ViewPager 上的 SimpleCursorAdapter

java - 使用 Javassist 实现 ClassFileTransformer

java - 如何通过espresso UI测试初始化​​presenter的可为空变量以避免NPE