我对何时使用setWidth和setHeight感到困惑?通常不起作用。

始终有效的是setLayoutParams。

这将起作用。

sampleButton = new Button(this);

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


这是行不通的。

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


也许有一些初始化可以使此代码起作用?

最佳答案

因此,只需查看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并没有真正覆盖内部的height参数,而只是设置了用于布局的标志。

更改布局参数(当视图进行自身布局时实际引用的布局参数)似乎会通知视图它实际上需要那么高

TLDR; setHeight与文本的行高有关而不是与视图的高度有关

关于android - 什么时候使用setWidth,setHeight,setLayoutParams(new LinearLayout.LayoutParams(w,h))?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20132048/

10-10 08:52