我正在寻找一种方法,当我更改屏幕尺寸时,它会按比例调整文本大小。 目前我试过了 Auto Scale TextView Text to Fit within 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" />
答案 0 :(得分:36)
您不需要致电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;
}
答案 1 :(得分:4)
https://developer.android.com/preview/features/autosizing-textview.html
答案 2 :(得分:2)
我在屏幕宽度上按比例使用它。
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
width_screen=displaymetrics.widthPixels;
Mytext.setTextSize(TypedValue.COMPLEX_UNIT_PX, (width_screen/CONST));
CONST是我用来缩放字体的数字,在我想要的尺寸中。 它适合我的需要。