2

我以编程方式将按钮添加到水平线性布局中,并且我想在布局之前知道这个按钮的宽度。

这是因为如果按钮的总宽度超过 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++;
            }

        }
    }
}

有解决方案吗?

4

0 回答 0