Android 将视图添加到RelativeLayout时如何避免重叠?

Android 将视图添加到RelativeLayout时如何避免重叠?,android,android-layout,textview,android-relativelayout,Android,Android Layout,Textview,Android Relativelayout,有一些Textview,我需要在RelativeLayout中动态添加它们。如何添加它们而不与上一个重叠?thx:D public class CusRelativeLayout extends RelativeLayout { private String TAG = "CusRelativeLayout"; ... public void add(String s){ final int childCount = getChildCount();

有一些Textview,我需要在RelativeLayout中动态添加它们。如何添加它们而不与上一个重叠?thx:D

public class CusRelativeLayout extends RelativeLayout {

    private String TAG = "CusRelativeLayout";
    ...
    public void add(String s){

        final int childCount = getChildCount();
        final TextView tv = new TextView(context);
        tv.setText(s);
        tv.setTextColor(getResources().getColor(R.color.black));

        LayoutParams params = (LayoutParams) generateDefaultLayoutParams();

        int[] xy = getRandomXY();

        if(childCount == 0){
            //no view
            params.setMargins(xy[0],xy[1],0,0);

        }else{

          //what shoud I do???

        }

        addView(tv,params);

    }
    ...
}
看起来是这样的:

当我添加第一个标记时,我只需要获得随机的X和Y,以及一个新的textview。我使用方法setMargins(X,Y,0,0)来添加RelativeLayout

但是,当我添加第二个标记时,我可以使用getTop()、getLeft()、getHeight()、getiWidth()来获取前一个位置和范围。使用getRandomXY()来获取第二个标记的随机X和Y。但是我无法获取第二个标记的范围来确定第二个标记是否与第一个标记重叠

我试着这么做

    final TextView tv = new TextView(context);
    tv.setText(s);
    tv.setTextColor(getResources().getColor(R.color.black));
    tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));

    tv.post(new Runnable() {
        @Override
        public void run() {
            Log.e(TAG,"height:" + tv.getHeight());
            Log.e(TAG,"width:" + tv.getWidth());
        }
    });
但是这个值是0

如果我用X和Y来确定,就是这样

我只想在添加到RelativeLayout之前获得新标记的范围,这样我就可以确定它是否会与前一个重叠


如果我能在加载项Relativelayout之前确定所有标记的位置?(我知道标记的确切数量)

设置Relativelayout以允许视图彼此重叠。你可以使用线性布局。 如果出于某种原因需要坚持使用RelativeLayout,则必须使用一些布局参数来放置新视图(相对于先前添加的子视图)

params.addRule(RelativeLayout.BELOW, R.id.below_id);
您可以使用您在其他孩子身上设置的自己的id,而不是R.id 看看这里

这看起来像什么?您不能改用标准线性布局吗?请检查问题更新,谢谢