0

先日、TextView 内のテキストのサイズを変更するこのコードを見つけました。しかし、どうすればそれを使用してプロジェクトに呼び出すことができますか。私は初心者です:)

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;

}
4

1 に答える 1

2

レイアウトでTextViewは、クラスの場所を指すことを除いて、典型的なように使用しますAutoFitTextView

 <com.your.package.name.AutoFitTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

そしてコードで:

AutoFitTextView foo = (AutoFitTextView) findViewById(id);

本当に必要なのは、レイアウト内で使用することだけです。レイアウト内で使用しない場合は、コード内でも使用しないでください。したがって、レイアウトとコードで使用するか、レイアウトのみで使用するか、まったく使用しないかのいずれかです。

また、レイアウトで正しい場所を指していることを確認してください。AutoFitTextViewクラスがどのパッケージに含まれているかわかりませんのでcom.your.package.name、例としてのみ使用しました。

それだけです、簡単です。

于 2012-04-26T01:27:55.317 に答える