2013-09-29 33 views
4

我想我的Android佈局的行爲,像這樣: 假設SomeLayout是WIDGET1,佈局2,和WIDGET2的家長,其中顯示的順序從上到下,像這樣:我怎樣才能使一個android viewgroup及其所有的子視圖動態維持等寬的基礎上最廣泛的孩子?

|-------SomeLayout-------| 
||--------Widget1-------|| 
||______________________|| 
||--------Layout2-------|| 
||______________________|| 
||--------Widget2-------|| 
||______________________|| 
|________________________| 

的3個孩子有內容正在改變。動態地,他們改變時,我總是希望最廣泛的內容包裝到內容。我想讓SomeLayout環繞那個最寬大的孩子,我希望所有其他孩子都能匹配那最寬的孩子。即使哪一個是最廣泛的變化。

我一直在嘗試一段時間來完成這個使用比我可以計數更多的方法。所有失敗。有沒有人知道haw通過android佈局XML實現這種效果?如果這是任何人都可以提供的,我會願意使用Java編程解決方案,但我更願意通過XML來實現。

回答

-1

好問題哥們。 啓動後檢查,我覺得這是一個很好的問題..

這裏是你想要的東西。檢查出來..

它只是簡單的一個.. 應用一些佈局寬度WRAP_CONTENT和所有直接孩子的寬度來match_parent ..

看到下面的例子..你可以符合它assigining的背景顏色。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <!-- This is Your Some Layout --> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <!-- Widget1 --> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="2431234vb sset " /> 

     <!-- Your Layout 2 (inner one) --> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="2431234v " /> 
     </LinearLayout> 

     <!-- Widget2 --> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="2431234vb sset " /> 
    </LinearLayout> 

</LinearLayout> 

希望這將有助於你..

0

我希望你SomeLayout延伸ViewGroup中,所以我想嘗試重寫onMeasure方法,以衡量在一個適當的方式,所有的孩子的。 例如

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int specWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int maxWidth = 0; 
    int maxIndex = 0; 
    for (int i = 0; i < getChildCount(); i++){ 
     View child = getChildAt(i); 
     final int widthSpec = MeasureSpec.makeMeasureSpec(
        specWidth, MeasureSpec.UNSPECIFIED); 
     final int heightSpec = MeasureSpec.makeMeasureSpec(
        0, MeasureSpec.UNSPECIFIED); 
     child.measure(widthSpec, heightSpec); 
     int width = child.getMeasuredWidth(); 
     if (width > maxWidth){ 
      maxWidth = width; 
      maxIndex = i; 
     } 
    } 
    for (int i = 0; i < getChildCount(); i++){ 
     if (i != maxIndex){ 
      View child = getChildAt(i); 
      final int widthSpec = MeasureSpec.makeMeasureSpec(
        maxWidth, MeasureSpec.EXACTLY); 
      final int heightSpec = MeasureSpec.makeMeasureSpec(
        0, MeasureSpec.UNSPECIFIED); 
      child.measure(widthSpec, heightSpec); 
     } 
    } 
    setMeasuredDimension(someMeasuredWidth, someMeasuredHeight); 
} 

所以,你應該定義最寬子和測量所有的人,以調整最大尺寸。之後,您應該根據測量的尺寸在onLayout方法實施中佈置所有孩子。

希望它會幫助你

+0

我來這裏尋找到使同一高度的所有兒童的佈局方法,我能做到這樣用你的方法,但是我不得不刪除最後一行'setMeasuredDimension(someMeasuredWidth ,someMeasuredHeight);'我也在第二行加了\t'super.onMeasure(widthMeasureSpec,heightMeasureSpec);' – Epaminondas

相關問題