2012-04-12 11 views
2

TextViewのサイズを背景画像で変更しようとしています。私はのTextViewクラスを拡張するクラスを持っている、そのように追加されます。Android setTextSize TextViewがベースラインを移動してテキストの高さを外す

MyCustomTextView tv2 = new MyCustomTextView(this); 
    RelativeLayout.LayoutParams lparams = new   
       RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
              LayoutParams.WRAP_CONTENT); 
    lparams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
    tv2.setLayoutParams(lparams); 
    myLayout.addView(v); 

と私は私のカスタムのTextViewクラスのようにズームしています:

public float getScaledTextHeight() 
    { 
     float textHeightDPI = initial_size/windowHeight_inDPI; 
     float textOnScreenHeight = textHeightDPI * windowHeight_inDPI; 
     float scaledText = textOnScreenHeight * mZoom; 
     return scaledText; 
    } 
    public void setZoomTextHeight(float zoom) 
    { 
     mZoom = zoom; 
     image_size = getScaledTextHeight(); 

     float mX = ((offset_x + img_offset_x) * mZoom); 
     float mY = ((offset_y + img_offset_y) * mZoom); 
     RelativeLayout.LayoutParams position1 = 
       (android.widget.RelativeLayout.LayoutParams)this.getLayoutParams(); 

     position1.leftMargin = (int)mX; 
     position1.topMargin = (int)mY; 
     position1.bottomMargin = (int)(window_height - (position1.topMargin + 
            image_size + 16)); 
     this.setLayoutParams(position1); 

     setTextSize(TypedValue.COMPLEX_UNIT_PX , image_size); 

     invalidate(); 
    } 

何が起こって終わることは作ることですテキストが大きくなるとTextViewのサイズが正しく調整されますが、テキストを小さくすると、サイズが大きいときと同じベースラインが維持されます。それは私のテキストをボトムアップからカットし始めます。

私の質問は、ベースラインをどのように移動して、リサイズ中にボトムが途切れることがないかです。

ありがとうございます。

答えて

1

コンストラクタでの追加によって修正されました。垂直スクロールバーの設定はうまくいきました。

this.setVerticalScrollBarEnabled(true); 
    this.setMovementMethod(new ScrollingMovementMethod()); 
+0

私のために働いた!この仕事をするためにここで何が起こっているのですか? – Glenn

+1

@Glennこれは、setMovementMethodを呼び出すことによって、不注意にアンドロイド:bufferType = "spannable"を設定しているため、ベースラインがシフトすることが予想されるためです。 – whiskeyjoe

2

バッファタイプをspannableに設定することで、マイフレーズシフトのベースラインの問題を解決しました。これは2つの方法で行うことができます。

android:bufferType="spannable" 

またはコード内の適切なバッファ・タイプの設定テキスト呼び出し:XMLにおけるバッファ・タイプ設定のいずれかspannableするBufferTypeを設定することにより

setText(getText(),BufferType.SPANNABLE); 

を、TextViewには自動的にそれに応じてベースラインをリセットします。これは非常に小さなパフォーマンスコストで行われます。

+0

これも私のために働いた!ありがとう。 – Glenn

+0

私の尊敬すべきことWhiskeyjoe氏、私はこの問題を数日間苦労してきました... – Maragues

関連する問題