3

背景画像で TextView のサイズを変更しようとしています。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 のサイズが正しく変更されますが、テキストを小さくすると、大きいときと同じベースラインが維持されます。それは私のテキストを下から切り取り始めます。

私の質問は、サイズ変更中に底が切れないようにベースラインを移動するにはどうすればよいかということです。

前もって感謝します。

4

2 に答える 2

3

私の(非)シフトベースラインの問題は、バッファタイプをスパン可能に設定することで解決されました。これには 2 つの方法があります。xml でバッファ タイプを設定します。

android:bufferType="spannable"

または、コードで適切なバッファ タイプを指定して set text を呼び出します。

setText(getText(),BufferType.SPANNABLE);

BufferType をスパン可能に設定すると、TextView はそれに応じてベースラインを自動的にリセットします。これは、非常にわずかなパフォーマンス コストで発生します。

于 2012-05-25T15:12:49.097 に答える
1

コンストラクタに追加することで修正しました。垂直スクロールバーの設定は問題なく機能しました。

    this.setVerticalScrollBarEnabled(true);
    this.setMovementMethod(new ScrollingMovementMethod());
于 2012-04-18T22:58:54.003 に答える