获取 Spannable TextView 的文本大小

3

我有一个按钮,当点击它时,可以增加所选文本的大小。我希望它增加到某个特定的大小,例如36sp,然后停止增加。我使用RelativeSizeSpan来实现这一点。但是,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);
}

1
这是因为getTextSize()返回TextView的默认值。你期望得到什么? - Barns
因为您正在使用RelativeSizeSpan,我认为您无法获得像“36sp”这样的绝对大小。您需要自己计算。如果您使用AbsoluteSizeSpan,则可以获得所选文本的绝对大小。 - Barns
@Barns 我想获取用户当前所选文本的文本大小,以此来限制他们可以增加文本的大小。 - Prox
@Barns 我想让用户可以自由地增加或减小文本的字号。从我的理解来看,AbsoluteSizeSpan 只能设置固定大小。所以我一开始的思路是,设置一个全局变量,并在用户增加字号时将其增加,在减小字号时将其减小。但我遇到了一个问题,全局变量始终保持不变,即使所选文本发生了变化。后来我决定使用 RelativeSizeSpan - Prox
1个回答

1
如果您仔细查看代码,您会发现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());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接