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