2012-03-23 41 views
6

我有3個片段的佈局:的Android獲得片段寬度

<LinearLayout android:id="@+id/acciones" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal"> 

<LinearLayout 
android:id="@+id/fragment1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1"> 

</LinearLayout> 


<LinearLayout 
android:id="@+id/fragment2" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1"> 

</LinearLayout> 

<LinearLayout 
android:orientation="vertical" 
android:id="@+id/f3" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1"> 

</LinearLayout> 

</LinearLayout> 

在我有一個TableLayout中,我有每行中一個自定義的TextView第一片段。 我想知道片段的寬度,因爲如果自定義TextView比片段寬,我會設置必要的行數。

這是我在我的自定義TextView中所做的:

@Override 
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { 
super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

mMaxWidth = (float) (getMeasuredWidth()); 
} 

有了這條線,我從三個片段的寬度,不僅包含自定義的TextView的一個。

謝謝。

回答

25

您應該可以將TextView的寬度設置爲fill_parent,在這種情況下,它將爲您打包。您不應將佈局的寬度設置爲match_parent,因爲在使用佈局權重時效率較低。

由於Android的佈局系統是偶爾的神祕與問候,查看大小,如果設置TextView的寬度要FILL_PARENT實際上使得它佔據整個屏幕(如似乎在暗示你的問題),請執行以下操作:

默認情況下,將TextView寬度設置爲0。在您的活動的onCreate,後設置內容視圖:

findViewById(R.id.acciones).getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     final int fragmentWidth = findViewById(R.id.releventFragmentId).getWidth(); 
     if (fragmentWidth != 0){ 
      findViewById(R.id.yourTextViewId).getLayoutParams().width = fragmentWidth; 
     } 
    } 
}); 

通過TextView的的寬度最初設置爲0,可以防止它改變片段的寬度。然後,可以使用視圖樹觀察器在佈局發生後獲取您感興趣的任何片段(通過查看其根視圖)的寬度。最後,你可以將你的TextView設置爲這個確切的寬度,這反過來會自動完成你的包裝。

請注意,onGlobalLayout可以被多次調用,並在所有視圖完全佈局之前定期調用,因此!= 0檢查。你也可能想做一些檢查,以確保你只設置文本視圖的寬度一次,否則你可以進入一個無限的佈局循環(不是世界末日,但對性能不利) 。

+0

神奇的觸摸無猴!它工作完美。我花了很多時間尋找我的問題的解決方案。非常感謝。偉大的知識! – gutiory 2012-03-24 11:55:46

+0

+1不錯的答案。 – Dharmendra 2012-03-24 16:30:33

+0

我已經添加了這個監聽器,它給了我片段的寬度和高度,但它不會將我的內容繪製到屏幕中,所以可以幫助解決這個問題 – 2013-12-23 09:57:11

相關問題