我以编程方式将按钮添加到水平线性布局中,并且我想在布局之前知道这个按钮的宽度。
这是因为如果按钮的总宽度超过 LinearLayout 宽度,App 在旧的 LinearLayout 下创建新的 LinearLayout。
按钮有 1 字节字符和多字节字符。
因此,当按钮只有 1 字节字符时按钮宽度的情况,当按钮只有多字节时按钮宽度的情况,按钮宽度是不同的。
public void draw() {
width = 320;//screen width
Button btn;
int i;
int twidth = 0;
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
lparams.setMargins(0, 5, 0, 5);
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
buttonParams.setMargins(5, 0, 5, 0);
for (i = -1; +i < size(); i++) {
LinearLayout layout2 = new LinearLayout(context);
layout2.setOrientation(LinearLayout.HORIZONTAL);
addView(layout2, lparams);
twidth = 0;
while (twidth < width && i + 1 < size()) {
btn = new Button(context);
btn.setText(element.get(i + 1).tagName);
btn.setTextColor(Color.BLACK);
btn.setBackgroundColor(Color.WHITE);
btn.setMaxLines(1);
btn.setLayoutParams(buttonParams);
twidth += btn.getTextSize() * btn.length() + 10;
if (twidth >= width) {
i--;
break;
} else {
btn.setPadding(5, 0, 5, 0);
btn.setClickable(true);
btn.setId(element.get(i + 1).tagId);
layout2.addView(btn, buttonParams);
i++;
}
}
}
}
有解决方案吗?