Получение размера текста Spannable TextView - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть кнопка, которая увеличивает размер выделенного текста при нажатии.Я хочу, чтобы он увеличился до определенного размера, например, 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 Ответ

0 голосов
/ 28 декабря 2018

Если вы присмотритесь к своему коду, вы заметите, что 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());
...