Android 获取可扩展文本视图的文本大小

Android 获取可扩展文本视图的文本大小,android,android-edittext,spannable,Android,Android Edittext,Spannable,我有一个按钮,它可以在单击时增加所选文本的大小。我希望它增加到一定的大小,例如36sp,然后停止。我正在为此使用相对性spantext.getTextSize()似乎返回了一个常量值,该值与默认值/总大小类似。如何获取所选文本的大小 private void makeChanges(float size) { Log.d("EditText", "makeChanges Text Size: " + text.getTextSize()); str.setSpan(new Re

我有一个按钮,它可以在单击时增加所选文本的大小。我希望它增加到一定的大小,例如36sp,然后停止。我正在为此使用
相对性span
text.getTextSize()
似乎返回了一个常量值,该值与默认值/总大小类似。如何获取所选文本的大小

private void makeChanges(float size) {
    Log.d("EditText", "makeChanges Text Size: " + text.getTextSize());

    str.setSpan(new RelativeSizeSpan(size),
                    selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    text.setText(str);
}

如果仔细查看代码,您会注意到RelativeSizeSpan接收到一个浮点值,它将文本大小增加给定的百分比。默认值以像素为单位。如果需要修改大小,则需要获取默认值并将其乘以
float size
变量。如果该因子在运行时发生变化,则可以使用以下方法访问它

下面的代码是一个演示,请调整它以供使用。它使用调试器进行测试,并显示正确的值

    SpannableString ss = new SpannableString("some nice text goes here.");
    ss.setSpan(new RelativeSizeSpan(3.0f), 5, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    TextView tView = findViewById(R.id.textView);

    tView.setText(ss);

    // default size - before span
    int pixelsPrevious = (int) tView.getTextSize();

    // spanned text
    Spanned spanned = (Spanned) tView.getText();
    RelativeSizeSpan[] spanArray = spanned.getSpans(0, spanned.length(), RelativeSizeSpan.class);

    // you are looking for this value.
    int pixelsNew = (int) (pixelsPrevious * spanArray[0].getSizeChange());

这是因为
getTextSize()
返回
TextView
的默认值。您希望得到什么?因为您使用的是
RelativeSizeSpan
我认为您无法获得像“36sp”这样的绝对大小。你需要自己做数学题。如果要使用
绝对大小span
,则可以获取所选文本的绝对大小。@Barns我希望用户获取当前所选文本的文本大小,因此,将其限制在可以增加文本大小的范围内text@Barns我希望用户增加文本大小,并根据需要减少文本大小。根据我对
绝对尺寸span
的理解,它设置固定尺寸。这是我最初的方法,设置一个全局变量,并在用户增加大小时将其添加到其中,否则将其减小。我遇到的问题是,即使所选文本发生更改,全局变量仍然保持不变。然后我决定使用
RelativeSizeSpan