动态对齐checkbox与relativelayout

时间:2017-05-20 05:02:52

标签: android android-layout checkbox

我是Android开发的新手,在我的项目中我想使用相对布局水平对齐复选框。我知道,线性布局更容易。

就我而言,复选框粘贴在同一位置

Main = (RelativeLayout) dialogLayout.findViewById(R.id.linearr);

                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

                LinkedHashMap<String, String> alphabet = new LinkedHashMap<String, String>();
                alphabet.put("1", "A");
                alphabet.put("2", "B");
                alphabet.put("3", "C");
                alphabet.put("4", "D");
                alphabet.put("5", "A");
                alphabet.put("6", "B");
                alphabet.put("7", "C");
                alphabet.put("8", "D");

                Set<?> set = alphabet.entrySet(); // Get an iterator

                Iterator<?> i = set.iterator(); // Display elements
                while (i.hasNext()) {
                    @SuppressWarnings("rawtypes")


                    Map.Entry me = (Map.Entry) i.next();

                    checkBox = new CheckBox(getContext());
                    checkBox.setId(Integer.parseInt(me.getKey().toString()));
                    checkBox.setText(me.getValue().toString());
                    params.rightMargin = 30;
                    if(Integer.parseInt(me.getKey().toString())==1)
                        params.addRule(RelativeLayout.ALIGN_LEFT);
                    else
                        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,Integer.parseInt(me.getKey().toString())-1);

                    checkBox.setLayoutParams(params);

                   Main.addView(checkBox, params);

` 将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用

执行此操作
 List<String> name = new ArrayList<>();
    List<Integer> id = new ArrayList<>();

    for (int i = 0; i < 8; i++) {
        name.add("C" + (i + 1));
        id.add(generateViewId());
    }

    for (int i = 0; i < name.size(); i++) {
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        CheckBox checkBox = new CheckBox(this);
        checkBox.setId(id.get(i));
        checkBox.setText(name.get(i));

        if (i != 0) {
            params.addRule(RelativeLayout.RIGHT_OF, id.get(i-1));
        }

        checkBox.setLayoutParams(params);
        container.addView(checkBox, params);

    }

生成ID以使它们是唯一的 - generate unique ids

/**
 * params
 * Generate a value suitable for use in
 * This value will not collide with ID values generated at build time by aapt for R.id.
 *
 * @return a generated ID value
 */
public static int generateViewId() {
    for (; ; ) {
        final int result = sNextGeneratedId.get();
        // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
        int newValue = result + 1;
        if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
        if (sNextGeneratedId.compareAndSet(result, newValue)) {
            return result;
        }
    }
}

输出:

enter image description here

答案 1 :(得分:0)

我做到了..诡计是,我们想创建一个新的params实例.`Map.Entry me =(Map.Entry)i.next();

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

        checkBox = new CheckBox(getApplicationContext());
        checkBox.setId(Integer.parseInt(me.getKey().toString()));
        checkBox.setText(me.getValue().toString());
        params.rightMargin = 30;
        if(Integer.parseInt(me.getKey().toString())==1)
            params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
        else {
            params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);//I added this one
            params.addRule(RelativeLayout.RIGHT_OF, Integer.parseInt(me.getKey().toString()) - 1);
            params.rightMargin = 30;
        }
        checkBox.setLayoutParams(params);

        Main.addView(checkBox, params);`