当addView到RelativeLayout时,如何避免重叠?

时间:2017-03-18 09:18:21

标签: 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();
        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);

    }
    ...
}

看起来像这样:   result

当我添加第一个标签时,我只需要获得随机的X和Y,然后新建一个textview。我使用方法setMargins(x,y,0,0)来添加RelativeLayout。

但是当我添加第二个标签时,我可以使用getTop(),getLeft(),getHeight(),getiWidth()来获取先前的位置和范围。并使用getRandomXY()获取随机X和Y second.But我无法得到秒的范围来确定第二个是否与第一个

重叠

我试图这样做

    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确定,那就是这种情况。determine by X and Y

我只是想在添加到RelativeLayout之前获取新标记的范围,因此我可以确定它是否会与之前的标记重叠。

如果我可以在添加到Relativelayout之前确定所有标记位置?(我知道标记的确切数量)

1 个答案:

答案 0 :(得分:0)

使RelativeLayout允许视图相互重叠。您可以使用LinearLayout。 如果由于某种原因需要坚持使用RelativeLayout,那么你必须将新视图放在相对于之前添加的子项的一些布局参数

params.addRule(RelativeLayout.BELOW, R.id.below_id);

而不是R.id.below_id你可以使用自己在其他孩子身上设置的ID 看看这里 Programatically add view one below other in relative layout