何时使用setWidth,setHeight,setLayoutParams(new LinearLayout.LayoutParams(w,h))?

时间:2013-11-21 21:16:47

标签: android button

我很困惑何时使用setWidth和setHeight?它通常不起作用。

setLayoutParams始终有效。

这会奏效。

sampleButton = new Button(this);

                sampleButton.setLayoutParams(new LinearLayout.LayoutParams(65, 65));

这不起作用。

sampleButton = new Button(this);
sampleButton.setHeight(65);
sampleButton.setWidth(65);

或许这个代码可能有一些初始化工作?

1 个答案:

答案 0 :(得分:1)

所以,只看了Button的源代码(TextView的子类):

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/widget/TextView.java#TextView.setHeight%28int%29

这是setHeight的方法

public void setHeight(int pixels) {
    mMaximum = mMinimum = pixels;
    mMaxMode = mMinMode = PIXELS;

    requestLayout();
    invalidate();
}

现在使用onMeasure方法,此处使用mMaximummMaxMode

    int unpaddedHeight = height - getCompoundPaddingTop() - getCompoundPaddingBottom();
    if (mMaxMode == LINES && mLayout.getLineCount() > mMaximum) {
        unpaddedHeight = Math.min(unpaddedHeight, mLayout.getLineTop(mMaximum));
    }

看起来setheight并没有真正覆盖内部高度参数,更多的是设置布局标志。

更改布局参数(在视图自行放置时实际引用的内容)似乎告知视图它实际上需要是那个高度

<强> TLDR; setHeight更多地与文本的行高相关,而不是视图的高度