techniqez
techniqez

Reputation: 135

TextView and EditText alignment issues

I'm adding TextViews and EditTexts to the the UI, but they are overlapping each other. I want them to appear next to each other. What I am missing in this code?

ScrollView sv = new ScrollView(this);
            RelativeLayout ll = new RelativeLayout(this);
            ll.setId(99);
            sv.addView(ll, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            ll.setBackgroundResource(R.drawable.background);

        for (int i = 0; i < 10 /*Changed the actual value for better Understanding*/; i++) {
            tv = new TextView(this);
            tv.setText("" + (productStr[i]));
            tv.setId(i);
            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18);
            RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            lay.addRule(RelativeLayout.ALIGN_RIGHT, RelativeLayout.TRUE);

            ll.addView(tv, lay);
            et = new EditText(this);
            et.setInputType(InputType.TYPE_CLASS_NUMBER);
            et.setEms(2);
            allEds.add(et);
            et.setId(i);

             RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
                     RelativeLayout.LayoutParams.WRAP_CONTENT);
             p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());
            ll.addView(et, p);


        }
        this.setContentView(sv);

Upvotes: 0

Views: 1611

Answers (3)

Abhilasha
Abhilasha

Reputation: 949

Just use LinearLayout in your xml. Something like this will generate a TextView next to the EditText

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10" >

            <requestFocus />
        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10" >

        </EditText>
    </LinearLayout>

</LinearLayout>

P.S: There are few norms which everyone follows in asking questions on this forums, like not using chat language in your question. Make short and sweet title and you can write any amount of explanation in your post.

Upvotes: 0

user
user

Reputation: 87064

There is no need to add extra layouts, you could do it with the RelativeLayout. The code below should layout the TextView and EditText like you want:

        ScrollView sv = new ScrollView(this);
        RelativeLayout ll = new RelativeLayout(this);
        ll.setId(99);
        ll.setBackgroundResource(R.drawable.background);

        sv.addView(ll, new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT));
        for (int i = 0; i < 10; i++) {
            tv = new TextView(this);
            tv.setText("" + (productStr[i]));
            tv.setId(1000 + i);
            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18);
            RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            lay.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
            if (i != 0) {
                lay.addRule(RelativeLayout.BELOW, 2000 + i - 1);
            }
            ll.addView(tv, lay);
            et = new EditText(this);
            et.setInputType(InputType.TYPE_CLASS_NUMBER);
            et.setEms(2);
            et.setId(2000 + i);
            RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            p.addRule(RelativeLayout.RIGHT_OF, tv.getId());
            if (i != 0) {
                p.addRule(RelativeLayout.BELOW, 2000 + i - 1);
            }
            ll.addView(et, p);
        }
        this.setContentView(sv);

Upvotes: 0

Marcin Orlowski
Marcin Orlowski

Reputation: 75635

Use LinearLayout instead of RelativeLayout, and leave positioning to the layouter.

PS: it's spelled "them" not "dem".

Upvotes: 1

Related Questions