如何避免动态定位视图的重叠

时间:2013-05-15 05:12:20

标签: android relativelayout

如何避免动态定位视图的重叠?

我有一个RelativeLayout,我在特定位置(x,y坐标)动态地(在运行时)添加视图,但问题是视图是重叠的。 如何避免这种情况。

提前致谢。enter image description here

    <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")){

    ....

}

4 个答案:

答案 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并将TextViewEditText添加到其中,然后将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

https://stackoverflow.com/a/5191159/1911784

答案 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等