随着文本视图变长,如何减少文本视图中的数字文本大小(以显示整个数字)?

How to reduce textsize of a number (to display entire number) in a textview as it gets longer?

我看到了与这个问题非常相似的问题的其他答案。但是,我希望我的计算器显示正常数字直到 13 位数字,然后在添加第 14 位数字时,开始以科学记数法显示。另外,我希望文本的大小随着位数超过 6 位而减少(就像我在 phone 上使用的其中一个计算器一样) 例如。

123456(最大文字大小)

1234567(文字大小缩小一个单位)

12345678(文字大小缩小一个单位)

123456789(文字大小缩小一个单位)

1234567890(文字大小缩小一个单位)

12345678901(文本大小进一步缩小一个单位以适应显示文本视图上的所有数字)

1234567890123(文字大小一直缩小到 13 位 - 这是最小文字大小,因此不会进一步缩小)

再添加一位时: 1.2345678901234 × 10^12(科学计数法显示的数字)

我不知道如何在应用程序运行时更改文本大小以及如何以科学记数法显示数字 - 只有在数字超过 13 位后。

谢谢。

我将创建一个名为 ScientificNotationTextView 的 TextView 子类。然后像这样覆盖 setText 函数:

public void setText(CharSequence text) {
    int length = text.size();
    setTextSize(getSizeForLength(length));
    if(length > 13) {
        NumberFormat formatter = new DecimalFormat("0.#####E0");
        super.setText(formatter.format(text.toString());
    }
    else {
        super.setText(text);
    }
}

这里的 getSizeForLength 应该 return 无论你想为那个长度使用什么文本大小。