2

プログラムでHorizo​​natal linearlayoutにボタンを追加しましたが、レイアウトの前にこのボタンの幅を知りたいです。

これは、ボタンの合計幅が LinearLayout の幅を超えている場合、アプリは古い 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