我很困惑何时使用setWidth和setHeight?它通常不起作用。
setLayoutParams始终有效。
这会奏效。
sampleButton = new Button(this);
sampleButton.setLayoutParams(new LinearLayout.LayoutParams(65, 65));
这不起作用。
sampleButton = new Button(this);
sampleButton.setHeight(65);
sampleButton.setWidth(65);
或许这个代码可能有一些初始化工作?
答案 0 :(得分:1)
所以,只看了Button
的源代码(TextView
的子类):
这是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更多地与文本的行高相关,而不是视图的高度