2012-12-24 68 views
0

我想在xml中並排繪製三個正方形,以便它們水平填充屏幕(每邊減去12 dp的邊距)。根據this post似乎可以做這與表格佈局混亂,但我想知道是否有更好的方法。這是我嘗試使用嵌套LinearLayouts,這將矩形垂直地填滿整個屏幕但除此之外沒有什麼我在尋找:Android - 在xml中繪製正方形

<?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:layout_margin="12dp" 
    android:background="#ffffff" 
    android:baselineAligned="false" 
    android:orientation="horizontal" > 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:background="@drawable/rectangle" > 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:background="@drawable/rectangle" > 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:background="@drawable/rectangle" > 
    </LinearLayout> 
</LinearLayout> 
+1

父的LinearLayout應當包括機器人:wieghtSum =「3」 –

+0

按照[文檔】( http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:weightSum)android:weightSum「定義了最大權重和,如果未指定,則通過添加所有子項的layout_weight來計算總和「。所以這不會有什麼區別。 –

回答

0

它似乎是最好的解決方案是用創建自定義視圖分量的重寫onMeasure()

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
} 
1

嘗試改變三個內部linearlayouts'機器人:layout_width =‘match_parent’到「包裝內容」。

我只是用下面的xml代碼做了一個測試。請注意,您的版本有兩個變化:

1我將match_parent更改爲三個子佈局的wrap_content。 2因爲我沒有背景圖片,所以我只是使用三種不同的顏色作爲背景。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="12dp" 
    android:background="#ffffff" 
    android:baselineAligned="false" 
    android:orientation="horizontal" > 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:background="#ff121212" > 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:background="#ff676767" > 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:background="#ffababab" > 
    </LinearLayout> 
</LinearLayout> 

我得到這個畫面:

my test result

因此,如果已經改變match_parent爲wrap_content但不行,我猜你的背景圖片太大。

此外,轉向瞭解layout_weight。 Layout_weight不決定元素的大小,它只在每個元素需要父級佈局的必要大小之後才起作用,然後父級佈局根據layout_weight爲每個元素分配其餘大小。

+0

這完全沒有什麼,因爲layout_weight已經在所有矩形的水平方向上設置了。即使layout_weight不在那裏,也會水平地摺疊所有的矩形,而不是製作方形。 –

+0

請看我更新的答案。 – TieDad

+0

我的背景圖片是一個矩形。但是,圖像的大小並不重要,因爲它會扭曲填充佈局。在這裏,佈局是矩形的,所以背景圖像不管是什麼尺寸都不會是方形的。 –

0

嘗試用這種方式來獲得邊距和高度。

<?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:background="#ffffff" 
    android:baselineAligned="false" 
    android:orientation="horizontal" > 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_marginLeft="12dp" 
     android:background="@drawable/rectangle" > 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:background="@drawable/rectangle" > 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:layout_marginRight="12dp" 
     android:background="@drawable/rectangle" > 
    </LinearLayout> 
</LinearLayout> 
+0

因爲沒有內容需要垂直換行,所以這只是將我的矩形摺疊爲4dp的水平線。此外,將邊距放入子佈局中功能上會更改UI,因爲它會使父LinearLayout填充整個屏幕。 –