Есть текст. Уже с разметкой. Задача: отобразить его в TextView в соответствии с разметкой, без дополнительных переносов. Идея: сделать это за счёт подбора размера шрифта перед отображением на дисплее. Реализация: Устанавливаем шрифт
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,mTextSize(TEXT));
Измеряем некую TextView с текстом, который хотим отобразить. Размер шрифта произвольный. TextView не имеет ограничений и должна принять размеры в зависимости от текста( а может и нет?). Также измеряем дисплей и по пропорции вычисляем необходимый нам размер шрифта. Такой, чтобы текст отобразился на нашем экране без ограничений и лишних переносов.
private float mTextSize(String mText){
TextView mTextView = new TextView(this);
mTextView.setText(mText);
mTextView.setTextSize( TypedValue.COMPLEX_UNIT_PX,111);
mTextView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
int mWidth = mTextView.getMeasuredWidth();
float textSize = (getDisplayWidth()*111)/mWidth;
return textSize;
}
Метод. Ширина дисплея устройства
private int getDisplayWidth (){
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
int width = point.x;
return width;
}
В итоге рассчитывается размер шрифта. Но такой, как будто этого и не происходило. Т.е. размер рассчитывается ровно такой, какой он по умолчанию без расчётов определяется TextView. Соответственно текст отображается с лишними переносами. Мне же надо, что бы какой бы длинной не была самая длинная строка, она должна влезть в экран целиком, пусть даже шрифт будет минимальным. Думаю что проблема связана с тем, что TextView при создании получает context, поэтому не является оторванной от устройства. Как можно это исправить?Что не так в моём подходе? Какими подходами пользуйтесь вы?
В support-библиотеке андроида есть готовое решение для этого. Просто нужно использовать AppCompatTextView с необходимыми атрибутами:
<android.support.v7.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:maxLines="1"
android:text="Hello World!"
app:autoSizeMaxTextSize="100sp"
app:autoSizeMinTextSize="12sp"
app:autoSizeTextType="uniform" />
Во-первых, для включения функции нужно указать атрибут autoSizeTextType, а также задать минимальный и максимальный размер шрифта. Если хотите запретить переносы, то укажите maxLines=1.
Обратите внимание, что используется AppCompatTextView, а не просто TextView.
Кроме того, проверьте, что у вас в build.gradle есть зависимость на com.android.support:appcompat-v7.
Больше примеров в гайде Autosizing TextViews
Виртуальный выделенный сервер (VDS) становится отличным выбором
По умолчанию в TableView нажатие на строки происходит с помощью 2-х клавиш мыши - левой и правойКак можно реализовать нажатие на строку исключительно...
В проекте имеется обычный интерфейс с единственным методОн был создан еще на Java 5 и стал за это время довольно популярным