2017-03-18 209 views
0

有一些Textview,我需要動態地將它們添加到RelativeLayout中。我如何添加它們而不與以前重疊? THX:daddView到RelativeLayout時如何避免重疊?

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.I使用方法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

這是什麼樣子的視覺?難道你不能使用標準的LinearLayout嗎? – zsmb13

+0

請檢查問題更新,謝謝 – feng

回答

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

+0

請檢查問題更新,謝謝 – feng