0

TextViewサブクラスのキャンバスの中央にテキストを配置しようとしています。Eclipseでは問題ないように見えますが、デバイスでは問題ありません。

Eclipse:

ここに画像の説明を入力してください

端末:

ここに画像の説明を入力してください

このようにテキストを中央に配置したいのには理由があります。これは問題に属していないため、ここでは説明していません(また、コードにも含まれていません)。

私はすでにディップとspsを使用しています。

コード:

package com.example.test2;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class CenterTest extends TextView {
    private Paint paint;
    private Paint paint2;
    private Rect bounds;

    public CenterTest(Context context) {
        super(context);
    }

    public CenterTest(Context context, AttributeSet attrs) {
        super(context, attrs);

        paint = new Paint();
        paint2 = new Paint();
        bounds = new Rect();
    }

    public void draw(Canvas canvas) {
        canvas.save();

        int width = getWidth();
        int height = getHeight();

        //draw background
        paint2.setColor(Color.rgb(0, 0, 0));
        paint.setStyle(Paint.Style.FILL);
        canvas.drawRect(0, 0, width, height, paint2);

        //measure text
        paint.setTextSize(getTextSize());
        paint.getTextBounds(getText().toString(), 0, getText().toString().length(), bounds);
        int textWidth =  bounds.width();
        int textHeight =  bounds.height();

        //center before drawing text
        canvas.translate((width / 2) - (textWidth / 2), 0);
        canvas.translate(0, (height / 2) - (textHeight / 2));

        //let TextView.onDraw() do the rest
        super.onDraw(canvas);

        canvas.restore();
    }
}

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff" 
    >
    <com.example.test2.CenterTest
        android:layout_width="100dip"
        android:layout_height="30dip"
        android:text="label"
        android:textColor="#ffffff"
        android:singleLine="true"
        android:textSize="12sp"
    />
</RelativeLayout>

おそらく理由はTextView.onDraw()のどこかにありますが、それは200行を超えるコードであり、今は時間がありません...そしてそれがそこにあるかどうかさえわかりません。

前もって感謝します!

4

1 に答える 1

0

android:gravity="center"を使用してみてください

<com.example.test2.CenterTest
    android:layout_width="100dip"
    android:layout_height="30dip"
    android:text="label"
    android:textColor="#ffffff"
    android:singleLine="true"
    android:textSize="12sp"
    android:gravity="center"
/>
于 2012-12-03T00:02:30.163 に答える