Reputation: 135
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
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
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
Reputation: 75635
Use LinearLayout instead of RelativeLayout, and leave positioning to the layouter.
PS: it's spelled "them" not "dem".
Upvotes: 1