有一些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之前确定所有标记位置?(我知道标记的确切数量)
答案 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