1

ビュー全体にテキストを均一に分散する必要があります。すべての画面サイズまたは一般的な画面サイズを満たす方法を見つけることができませんでした。達成したいレイアウトを以下に示します。 分散テキスト

赤いボックスは、私が作業しようとしているテキストビューを示しています。

私は次のアプローチを試しました:

1) 9 パッチの有無にかかわらず、画像を使用しようとすると、正しくスケーリングされません。2) sw320、sw480、sw600、sw720 などの異なるサイズのバケットを使用してみてください。そして、私がテストできるデバイスではこれを修正しますが、信頼できるものではありません. これらのバケットにさまざまなテキスト サイズを入れています。

テーブル、グリッド、または線形レイアウトで 24 の texview を使用するのは嫌いです。

他にどのようなオプションがありますか? 解決策 2 は、約 20 回のように次元からレイアウトに移動し、再び元に戻るという作業が非常にイライラするものでした。これを行うにはもっと簡単な方法があるはずです。ない場合は教えてください。

4

1 に答える 1

1

カスタム ビューを使用し、onDraw をオーバーライドして数字を描画します。ビューを含むレイアウトは、サイズを (res/values/ から) 使用して指定できます。ビューは、それらのサイズに基づいて、フォント サイズと数値間の間隔を自動的に決定します。

例えば

カスタム ビュー:

public class ColumnNumbersView extends View
{
    private final static int NUMBER_OF_COLUMNS = 25;
    private float textSize;
    private final Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    ...

サイズの取得:

    @Override 
    protected void onLayout(...
    {
        super.onLayout(...

        // work out our text size from getHeight()
        textSize = getHeight()/2; // or something like that

        // work out the spacing between the numbers along the x axis
        textPosXInc = (getWidth() / NUMBER_OF_COLUMNS) / 2; // or something like that
    }

描画を行う:

    @Override
    protected void onDraw(final Canvas canvas)
    {
        super.onDraw(canvas);

        int x = 0;
        for(int i=0; i < NUMBER_OF_COLUMNS; i++)
        {
           final String number = String.valueOf(i);
           final int halfWidth = textPaint.measureText(number) / 2;

           canvas.drawText(number, x - halfWidth, 0, textPaint);

           x += textPosXInc; 
        }
    }

それは近いものを描くはずですが、最初と最後の数字は正しく描画されませんが、修正するために残します。

編集

onMeasure() をオーバーライドしてラップするサイズを指定しないため、このビューのサイズに wrap_content を使用できないことに注意してください。したがって、特定のサイズ セットまたは match_parent が必要になります。

于 2013-03-01T08:00:56.990 に答える