Android 何时使用setWidth、setHeight、setLayoutParams(新的LinearLayout.LayoutParams(w,h))?

Android 何时使用setWidth、setHeight、setLayoutParams(新的LinearLayout.LayoutParams(w,h))?,android,button,Android,Button,我不知道什么时候使用setWidth和setHeight?它通常不起作用 始终有效的是setLayoutParams 这会奏效的 sampleButton = new Button(this); sampleButton.setLayoutParams(new LinearLayout.LayoutParams(65, 65)); 这是行不通的 sampleButton = new Button(this); sampleButton.setHeight(65

我不知道什么时候使用setWidth和setHeight?它通常不起作用

始终有效的是setLayoutParams

这会奏效的

sampleButton = new Button(this);

                sampleButton.setLayoutParams(new LinearLayout.LayoutParams(65, 65));
这是行不通的

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

或者这段代码可能有一些初始化功能?

因此,请查看
按钮的源代码(它是
文本视图的子类)

下面是设置高度的方法

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

    requestLayout();
    invalidate();
}
现在在
onMeasure
方法中,这里使用
mMaximum
mMaxMode

    int unpaddedHeight = height - getCompoundPaddingTop() - getCompoundPaddingBottom();
    if (mMaxMode == LINES && mLayout.getLineCount() > mMaximum) {
        unpaddedHeight = Math.min(unpaddedHeight, mLayout.getLineTop(mMaximum));
    }
看起来setheight并没有真正覆盖内部高度参数,更多的只是为布局设置标志

更改布局参数(视图布局时实际引用的参数)似乎会通知视图它实际上需要达到该高度


TLDR;setHeight与文本行高的关系大于视图高度的关系,因此,只需查看
按钮
的源代码(它是
文本视图
的子类):

下面是设置高度的方法

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

    requestLayout();
    invalidate();
}
现在在
onMeasure
方法中,这里使用
mMaximum
mMaxMode

    int unpaddedHeight = height - getCompoundPaddingTop() - getCompoundPaddingBottom();
    if (mMaxMode == LINES && mLayout.getLineCount() > mMaximum) {
        unpaddedHeight = Math.min(unpaddedHeight, mLayout.getLineTop(mMaximum));
    }
看起来setheight并没有真正覆盖内部高度参数,更多的只是为布局设置标志

更改布局参数(视图布局时实际引用的参数)似乎会通知视图它实际上需要达到该高度

TLDR;setHeight与文本行高的关系大于与视图高度的关系