如何在onLayout期间调整Android UI元素的大小?

时间:2012-07-16 19:48:13

标签: android layout view measure

我有一个基于LinearLayout的按钮类,其中包含两个TextView s,我希望按钮始终为方形(我正在使用onMeasure()),以及TextView的上部自动调整大小以适应按钮。我希望较低的TextView具有固定大小的文本,因此它看起来大致像

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

“180”在可用空间中尽可能大。

我正在onLayout()调用一个名为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()

但是,我有两个初始问题:首先,将文本大小设置为某个像素值会使View稍微大于而不是像素值。我想弄清楚设置文本高度以适应可用空间的大小;四分之三似乎工作正常,但我宁愿有一个确切的价值。

第二个问题是,在我更改文本大小后,getMeasuredWidth()的值似乎没有变化。为什么不呢?

1 个答案:

答案 0 :(得分:0)

回答第2部分:

有必要致电

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

告诉系统测量视图,好像它的大小没有限制。调用此方法后,如果空间不是对象,则可以查看 的视图大小,并相应地缩小它。