0

I am new to android development,in my project I want to align checkboxes horizontally using Relative layout.I know,its easier with Linear layout.

In my case,the checkboxes pasted on a same position

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);

` Help will be appreciated.

Abdul Kawee
  • 2,598
  • 1
  • 12
  • 26
Rajesh Naddy
  • 944
  • 10
  • 17

2 Answers2

1

You can do it using

 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);

    }

To generate the Ids so that they are unique - 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;
        }
    }
}

Output :

enter image description here

Community
  • 1
  • 1
0

I did it..The Trick is,we want to create a new instance of 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);`
Rajesh Naddy
  • 944
  • 10
  • 17