如何避免动态定位视图的重叠?
我有一个RelativeLayout,我在特定位置(x,y坐标)动态地(在运行时)添加视图,但问题是视图是重叠的。 如何避免这种情况。
提前致谢。
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/rl_main"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</RelativeLayout>
<LinearLayout
android:layout_width="fill_parent"
android:id="@+id/ll_mainBottom"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
</ScrollView>
javacode
ll_main = (RelativeLayout) findViewById(R.id.rl_main);
if (views[3].equals("textView")) {
TextView tv_new = new TextView(TenMinActivity.this);
// location
int x = Integer.parseInt(views[12]);
int y = Integer.parseInt(views[13]);
String bgColor = "#" + views[4];
String fgColor = "#" + Views[5];
tv_new.setBackgroundColor(Color.parseColor(bgColor)); // Bg Color
tv_new.setTextColor(Color.parseColor(fgColor)); // Text color
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
width, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = x;
params.topMargin = y;
ll_main.addView(tv_new, params);
}else if(views[3].equals("edittext")){
....
}
答案 0 :(得分:1)
给
android:paddingLeft=""
和每个元素,以便屏幕左侧的那些元素具有一点空间。和右边的那些,给
android:paddingBottom=""
首先,检查名称文本的前2个元素和文本字段,然后再继续。
如果您发布代码,我可以更好地指导您
检查一下,
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="Name"
android:textSize="18sp" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView1"
android:layout_alignParentTop="true"
android:layout_marginLeft="21dp"
android:layout_toRightOf="@+id/textView1"
android:ems="10"
android:padding="10dp"
android:paddingl="10dp" >
<requestFocus />
</EditText>
</RelativeLayout>
答案 1 :(得分:0)
您需要了解布局的工作原理,首先尝试在xml中进行相同的布局。然后,您将了解到可以使用LinearLayout
轻松地进行此类布局。
您可以使用父LinearLayout
并为其添加子布局。现在你说如果使用LinearLayout
,所有子视图都会垂直显示。它会垂直显示,因为您要逐个添加它们。如果您使用RelativeLayout
并将TextView
和EditText
添加到其中,然后将RelativeLayout
添加到LinearLayout
,您将获得所需的结果。< / p>
<LinearLayout>
<RelativeLayout>
<TextView />
<EditText />//use layout_margin or layout_toLeftOf for moving to to right
</RelativeLayout>
<RelativeLayout>
<TextView/>
<EditText/>
</RelativeLayout>
</LinearLayout>
答案 2 :(得分:0)
在向容器相对布局添加视图时,请使用布局参数,例如layout_below layout_above toRightof和ToLeftof
答案 3 :(得分:0)
您可以使用下面的代码在您的布局中添加视图
RelativeLayout.LayoutParams newParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
TextView text2 = new TextView(context);
newParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
newParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
newParams.addRule(RelativeLayout.ALIGN_BOTTOM, text1.getId());
text2.setLayoutParams(newParams);
layout.addView(text2);
布局是您的主要布局。
你也可以使用其他参数 - 比如rightof,leftof等