создать изменяемый текст редактирования с изменяемым размером, который изменяется от максимального размера текста до минимального размера текста в каждой строке отдельно - PullRequest
0 голосов
/ 23 января 2020

Я хочу создать текст редактирования, в котором размер текста начинается с некоторого максимального размера, скажем 80sp. Когда введенный текст достигнет конца ширины текста редактирования, размер текста должен уменьшиться, чтобы введенный текст мог уместиться в одну строку, это должно продолжаться до тех пор, пока размер текста не станет минимальным, скажем 18sp. Когда размер текста 18sp, и если вводится больше текста, новый текст может go во второй строке, но во второй строке. Во второй строке размер должен быть только 80sp. Средства в первой строке 18sp и во второй строке 80sp.

Я сталкиваюсь с проблемой, которая заключается в том, что когда текст достигает конца первой строки и вводится больше текста, иногда создается вторая строка без уменьшения размер в первой строке.

Это видео-ссылка для лучшего понимания моей проблемы. https://drive.google.com/open?id=1eRgr6YaSqNc06anaDZg2kETTKCgi-hC7

Мой код

  mainBinding.editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            update(s.toString());
        }
    });

private void update(String s){
    float size = getNewSize(s);
    mainBinding.editText.setTextSize(size);
}

private float getNewSize(String line){
    float currentSize = 80;
    while (hasLineBreak(line, currentSize)) {
        currentSize -= 1;
    }
    return currentSize;
}

private boolean hasLineBreak(String text,float size){
    TextPaint textPaint = new TextPaint();
    textPaint.setTextSize(size);
    Layout layout =
            new StaticLayout(
                    text,
                    textPaint,
                    350,
                    Layout.Alignment.ALIGN_CENTER,
                    1,
                    0,
                    true);

    return layout.getLineCount()>1;

}

Я хочу реализовать то же самое, что и функция истории в режиме типа Instagram.

...