2013-01-22 57 views
0

我寫了一個擴展的ViewGroup一類的ViewGroup和覆蓋的方法如下:如何添加子視圖使用RelativeLayout.LayoutParams

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    for(int index = 0; index < getChildCount(); index++){ 
      int width = MeasureSpec.getSize(widthMeasureSpec); 
      int height = MeasureSpec.getSize(heightMeasureSpec); 
      View child = getChildAt(index); 
      child.measure(View.MeasureSpec.makeMeasureSpec(width, 
        View.MeasureSpec.UNSPECIFIED), View.MeasureSpec 
        .makeMeasureSpec(height, View.MeasureSpec.UNSPECIFIED)); 
    } 
} 

當我添加子視圖的ViewGroup這個如下:

String word = words[random.nextInt(words.length)]; 
      RelativeLayout layout = new RelativeLayout(DraggableGridViewSampleActivity.this); 
      TextView text = new TextView(DraggableGridViewSampleActivity.this); 
      text.setText(word); 
      ImageView view = new ImageView(DraggableGridViewSampleActivity.this); 
      view.setImageBitmap(getThumb(word)); 
      layout.addView(view); 

      RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      layout.addView(text, params); 
      dgv.addView(layout); 

效果如下所示:textView無法完全顯示。似乎父視圖沒有提供足夠的空間來顯示文本視圖。

如何有TextView的完全顯示?

+0

分享它是如何現在看一些快照!在xml中執行此操作非常容易btw – khurram

+0

對不起,我沒有權限 – MuziLee

回答

0

TextView的不能完全顯示。似乎父級 視圖沒有提供足夠的空間讓textview顯示。

你究竟想用onMeasure方法做什麼?現在你讓超類處理兒童(super.onMeasure)的初始測量,然後你再重新測量的孩子,這時候給他們一個MeasureSpec.UNSPECIFIED,基本上是告訴孩子他們可能是大如他們想要的。

您應該始終尊重MeasureSpec當你測量兒童(或父母應該允許滾動)。如果家長說,孩子應該是AT_MOST 500像素,那麼請不要在可能這個值,給他們的UNSPECIFIED一個MeasureSpec測量兒童在步驟。

+0

非常感謝您的回答。但是,當我完全改變了這個狀態時,「params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);」似乎沒有效果。我怎麼能告訴孩子它的確切大小,並使用params? – MuziLee

+0

@BigFootprint你確定沒有遵守規則嗎?問題在於,如果簡單地將'Started'修改爲'EXACTLY',那麼當您將整個父寬度作爲大小('int width')傳遞時,子節點仍將佔用父節點的全部寬度。而不是'寬度'使用像'100'這樣的較小的值(或者小於父寬度的東西)並且看看它是如何發生的。 – Luksprog

+0

什麼都沒有發生。寬度的變化不會影響用戶界面。這很奇怪。 – MuziLee