Размер шрифта Auto Scale

Я ищу способ, когда я изменю размер экрана, он будет пропорционально изменять размер текста. В настоящее время я попробовал Auto Scale TextView Text для Fit в пределах Bounds, но он, похоже, не работает. Но я не уверен, что делаю это правильно или нет. Я сейчас звоню

AutoResizeTextView test = new AutoResizeTextView(this); test=(AutoResizeTextView)findViewById(R.id.test456); test.resizeText(); // I call this to resize.. am I right? 

XML

 <com.mypackage.AutoResizeTextView android:id="@+id/test456" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" /> 

Вам не нужно вызывать AutoResizeTextView test , вы можете сказать TextView поскольку класс расширяет TextView . Я не понимаю, почему вам нужно будет вызвать resizeText() .

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

 public class AutoFitTextView extends TextView { public AutoFitTextView(Context context) { super(context); init(); } public AutoFitTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { maxTextSize = this.getTextSize(); if (maxTextSize < 35) { maxTextSize = 30; } minTextSize = 20; } private void refitText(String text, int textWidth) { if (textWidth > 0) { int availableWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight(); float trySize = maxTextSize; this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize); while ((trySize > minTextSize) && (this.getPaint().measureText(text) > availableWidth)) { trySize -= 1; if (trySize <= minTextSize) { trySize = minTextSize; break; } this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize); } this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize); } } @Override protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) { refitText(text.toString(), this.getWidth()); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { if (w != oldw) { refitText(this.getText().toString(), w); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int parentWidth = MeasureSpec.getSize(widthMeasureSpec); refitText(this.getText().toString(), parentWidth); } public float getMinTextSize() { return minTextSize; } public void setMinTextSize(int minTextSize) { this.minTextSize = minTextSize; } public float getMaxTextSize() { return maxTextSize; } public void setMaxTextSize(int minTextSize) { this.maxTextSize = minTextSize; } private float minTextSize; private float maxTextSize; } 

Я использую это пропорционально по ширине экрана.

 DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); width_screen=displaymetrics.widthPixels; Mytext.setTextSize(TypedValue.COMPLEX_UNIT_PX, (width_screen/CONST)); 

CONST – это номер, который я использую для масштабирования шрифта, в измерении, которое я хочу. Он работает для моих нужд.

Хорошие новости! Google представила поддержку Autosizing TextView в Android O. Она также будет включена в библиотеку поддержки.

https://developer.android.com/preview/features/autosizing-textview.html