0

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

我有一个 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>

代码

 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

4 回答 4

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>
于 2013-05-15T05:23:51.767 回答
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);

其中 layout 是您的主要布局。

你也可以使用其他参数——比如 rightof、leftof 等

于 2013-05-15T06:46:23.153 回答
0

当您将视图添加到容器相对布局时,请使用 layout_below layout_above toRightof 和 ToLeftof 等布局参数

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

于 2013-05-15T06:24:07.110 回答
0

您需要了解布局的工作原理,首先尝试在 xml 中制作相同的布局。然后您将了解到这种布局可以很容易地使用LinearLayout.

您可以使用父LinearLayout级并向其添加子布局。现在你说如果你使用LinearLayout所有子视图都垂直显示。它垂直显示,因为您正在逐一添加它们。如果您采取 aRelativeLayout并将您的TextViewand添加EditText到它,然后将其添加RelativeLayout到您的LinearLayout,您将获得所需的结果。

<LinearLayout>
    <RelativeLayout>
        <TextView />
        <EditText />//use layout_margin or layout_toLeftOf for moving to to right
    </RelativeLayout>

    <RelativeLayout>
        <TextView/>
        <EditText/>
    </RelativeLayout>
</LinearLayout> 
于 2013-05-15T05:31:47.037 回答