Android 切换编辑文本字体

Android 切换编辑文本字体,android,android-edittext,spannable,Android,Android Edittext,Spannable,大家好,我正在制作一个应用程序,用户只需点击一个按钮就可以将可显示的文本斜体化 // Captures Contextual Menu Clicks// public void onContextualMenuItemClicked(MenuItem item) { int id = item.getItemId(); if (id == R.id.bold) { // do some stuff } if (id == R.id.italic

大家好,我正在制作一个应用程序,用户只需点击一个按钮就可以将可显示的文本斜体化

// Captures Contextual Menu Clicks//
public void onContextualMenuItemClicked(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.bold) {
        // do some stuff
    }

    if (id == R.id.italic) {

        int startSelection = noteContent.getSelectionStart();
        int endSelection = noteContent.getSelectionEnd();
        Spannable spannable = noteContent.getText();

        spannable.setSpan(new StyleSpan(Typeface.ITALIC) , startSelection , endSelection , 0);



        StyleSpanRemover spanRemover = new StyleSpanRemover();

        spanRemover.RemoveStyle(spannable,startSelection,endSelection,Typeface.ITALIC);
    }
此代码使其为斜体

        int startSelection = noteContent.getSelectionStart();
        int endSelection = noteContent.getSelectionEnd();
        Spannable spannable = noteContent.getText();

        spannable.setSpan(new StyleSpan(Typeface.ITALIC) , startSelection , endSelection , 0);
这使得它不斜体

        StyleSpanRemover spanRemover = new StyleSpanRemover();

        spanRemover.RemoveStyle(spannable,startSelection,endSelection,Typeface.ITALIC
我希望用户单击相同的按钮来调整和取消调整斜体。如果我可以使用Statation来获取所选单词的字体,该怎么办?这样它就知道是否要斜体化

更新:这就是我现在拥有的

     int startSelection = noteContent.getSelectionStart();
        int endSelection = noteContent.getSelectionEnd();
        Spannable spannable = noteContent.getText();

        StyleSpan[] spans = spannable.getSpans(startSelection, endSelection, StyleSpan.class);

        if (spans.length == 0) {

            spannable.setSpan(new StyleSpan(Typeface.ITALIC), startSelection, endSelection , 0);

        } else {

            spannable.setSpan(new StyleSpan(Typeface.NORMAL), startSelection, endSelection , 0);
        }
即使代码运行代码

  spannable.setSpan(new StyleSpan(Typeface.NORMAL), startSelection, endSelection , 0);
并使其恢复正常。但是它不会将spans.length设置回零,因此我无法再次将其斜体化。如何将spans.length设置为零。

您可以使用getSpansstartSelection、endSelection、StyleSpan.class查看选择范围中存在哪些跨距。基于此,您可以决定是否以及如何将文本斜体化。注意:用户可能会突出显示包含普通文本和斜体文本的部分

编辑


我如何在if语句中使用它?感谢Jordan:如果该范围内没有跨距,则不能使用斜体。否则,有些东西是斜体的。我得到了它的前提,是的。如果getSpansstartSelection、endSelection、StyleSpan.class=,我就是不知道如何将其放入代码中?{ }
StyleSpan[] spans = spannable.getSpans(startSelection, endSelection, StyleSpan.class);
if (spans.length == 0) {
    // no spans, italicize text here
} else {
    // TODO
}