如何在addView之前计算按钮宽度

时间:2013-03-27 11:52:47

标签: android android-layout

我以编程方式将按钮添加到Horizo​​natal linearlayout中,我想在布局之前知道这个按钮宽度。

这是因为如果按钮的总宽度超过LinearLayout宽度,App会在旧的LinearLayout下面创建新的LinearLayout。

按钮具有1byte char和multibyte char。

因此,当按钮只有1byte char时按钮宽度的情况,按钮只有多字节时按钮宽度的情况,按钮宽度不同。

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++;
            }

        }
    }
}

有解决方案吗?

0 个答案:

没有答案