2

LinearLayout2 つの を含むa に基づくボタン クラスがありTextView、ボタンを常に正方形にして ( を使用していますonMeasure())、TextViews の上部をボタンに合わせて自動的にサイズ変更します。下部に固定サイズのテキストを持たせたいTextViewので、おおよそ次のようになります

|---------|
|         |
|  1 8 0  |
|         |
|   foo   |
|---------|

「180」は、使用可能なスペースで可能な限り大きくなります。

私はonLayout()calledで関数を呼び出していますadjustTextSize():

private void adjustTextSize() {

    float height = mHeight - mTitleView.getMeasuredHeight() - 4 * mPadding - getPaddingTop() - getPaddingBottom(); //title text view

    int numberheight = (int) (height * 0.75);
    int extravertpadding = 0;//(int) (height * 0.125);

    mTitleView.setPadding(mPadding, 0, mPadding, mPadding);

    mNumberView.setTextSize(TypedValue.COMPLEX_UNIT_PX, numberheight);
    mNumberView.setPadding(mPadding, mPadding + extravertpadding, mPadding, mPadding + extravertpadding);

    if(mNumberView.getMeasuredWidth() > mWidth) {
        float reduction = mWidth / mNumberView.getMeasuredWidth();
        extravertpadding = (int) ((numberheight - height*reduction) / 2);
        numberheight = (int) (height*reduction);
        mNumberView.setTextSize(TypedValue.COMPLEX_UNIT_PX, numberheight);
        mNumberView.setPadding(mPadding, mPadding + extravertpadding, mPadding, mPadding + extravertpadding);
    }

    mNumberView.setTextSize(TypedValue.COMPLEX_UNIT_PX, numberheight);
    mNumberView.setPadding(mPadding, mPadding + extravertpadding, mPadding, mPadding + extravertpadding);

}

mWidthmHeightに設定されていonLayout()ます。

ただし、最初に 2 つの問題があります。まず、テキスト サイズを特定のピクセル値に設定すると、ピクセル値よりもView若干大きくなります。使用可能なスペースに合わせてテキストの高さを設定する大きさを計算したいと思います。4 分の 3 は問題ないようですが、正確な値が必要です。

2 番目の問題はgetMeasuredWidth()、テキスト サイズを変更した後、 の値が変化していないように見えることです。なぜだめですか?

4

1 に答える 1

0

パート 2 への回答:

電話する必要があります

mNumberView.measure(
    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
);

サイズに制約がないかのようにビューを測定するようにシステムに指示します。これが呼び出された後、スペースがオブジェクトではない場合にビューどのくらいの大きさになるかを確認し、それに応じて縮小できます。

于 2012-07-16T19:51:31.913 に答える