2012-04-26 8 views
0

いつか前に、TextViewの内部でテキストのサイズを変更するコードが見つかりました。しかし、どうやってそれを私のプロジェクトに使うことができますか?あなたはAutoFitTextViewクラスの場所を指す除き、あなたのレイアウトでは、初心者:)AutoFitTextViewの使い方

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

イム、あなたは典型的なTextViewのようにそれを使用しています。

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

、コードで:

AutoFitTextView foo = (AutoFitTextView) findViewById(id); 

あなたが本当にやらなければならないことは、あなたのレイアウト内にそれを使用しています。レイアウト内で使用しない場合は、コード内で使用しないでください。だから、あなたのレイアウトとコード、レイアウトのみ、またはまったく使用しないでください。

また、レイアウトでは、正しい場所にpoitingしていることを確認してください。どのパッケージにあなたのAutoFitTextViewクラスがあるのか​​わからないので、例としてcom.your.package.nameを使用しました。

これは簡単です。

+0

私はAutofittextviewにすべてのTextViewを変更しましたが、私はそれを実行しようとしたとき、プログラムはエラー 4月26日09上げる:29:14.570:E/AndroidRuntime(1090):致命的な例外:メイン 4月26日09 :29:14.570:E/AndroidRuntime(1090):java.lang.ClassCastException:android.widget.TextView – felangga

+0

私はいくつかの編集を行いました。あなたが問題を抱え続けているなら、あなたがしていることについて考えてみるべきです。あなたのクラスを使用することは本当に簡単です、通常の 'TextView'のように使用してください。私はあなたがここからそれを理解できると確信しています。 – adneal

+0

うん。最後にコードが動作します。 。ありがとう:) – felangga