2011-01-24 39 views
11

Tôi đang cố gắng tạo 4 nút, được đặt cách đều nhau trong chế độ xem dọc trên Android.Nút cách đều nhau trong Bố cục

Khoảng trống sẽ tăng hoặc giảm kích thước tùy thuộc vào kích thước màn hình, với khoảng không gian đồng đều giữa mỗi nút và đường viền.

Tôi đã thử sử dụng bố cục tuyến tính, trọng lượng và trọng lượng bố cục nhưng có vẻ như tôi không thể căn giữa nút theo chiều dọc.

Đây có phải là lỗi bố cục Android không? Có lẽ nhiều hơn chỉ là tôi.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/btn_f" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="btn_f" 
> 
</Button> 
</LinearLayout> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/btn_b" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="btn_b" 
> 
</Button> 
</LinearLayout> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/btn_a" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="btn_a" 
> 
</Button> 
</LinearLayout> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/settings" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Settings" 
> 
</Button> 
</LinearLayout> 
</LinearLayout> 

Trả lời

20

Hãy thử một cái gì đó như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    > 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:orientation="vertical" 
     android:layout_weight="1" 
     android:gravity="center" 
     > 
     <Button 
      android:id="@+id/btn_f" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="btn_f" 
      /> 
    </LinearLayout> 
    <!-- etc --> 
</LinearLayout> 

Những thay đổi từ bố cục ban đầu của bạn là mỗi bên trong LinearLayout có chiều cao bằng không và trọng lực (không phải layout_gravity) của chính giữa. Điều này sẽ làm cho tất cả các bố cục tuyến tính bên trong có cùng độ cao, chia đều chiều cao gốc, không kéo giãn các nút.

+1

Bằng cách này nó đã không hoạt động ... nhưng nếu bạn chỉ định cả layout_gravity và trọng lực như trung tâm nó làm việc .... chắc chắn giao diện android xml là POORLY tài liệu .... – Mascarpone

+0

Nó phải là android: layout_gravity = "center" không phải android: gravity = "center". Không cần sử dụng android: gravity = "center" tại đây. thẻ trọng lực ảnh hưởng đến việc định vị nội dung của nó trong khi layout_gravity ảnh hưởng đến việc định vị chính nó đối với cha mẹ của nó. – wooohoh

1

Bạn dường như được gói tất cả các nút trong LinearLayout khác thay vì chỉ giữ cho chúng trong các phụ huynh LinearLayout.

Xóa tất cả những người ngay lập tức LinearLayout để android:layout_weight có hiệu lực.


Để đạt được kéo dài và khoảng cách

  • sử dụng android:layout_width="fill_parent" trong các nút tự
  • thể thiết lập lề cho khoảng cách
+0

điều này chỉ đơn giản là kéo các nút ... Tôi muốn các nút được nhỏ với không gian xung quanh chúng ... mỗi ở trung tâm của một hình chữ nhật – Mascarpone

+2

Xem cập nhật của tôi xin vui lòng – Aliostad

+2

Xác định lề là những gì tôi muốn tránh ... bạn cần phải đặt một chiều và thậm chí nếu nó đang ở trong dip hiệu quả cuối cùng là không giống nhau trên mỗi màn hình ... Không phải là có một cách tự động như với trọng lượng? – Mascarpone

3

Hãy thử điều này:

<LinearLayout   
    android:layout_width="wrap_content"   
    android:layout_height="0dp"   
    android:orientation="horizontal"   
    android:weightSum="1"   
    android:gravity="center"> 
    <Button    
     android:id="@+id/btn_f"  
     android:layout_width="0dp" 
     android:layout_weight="0.5" 
     android:layout_height="wrap_content"  
     android:text="btn_f" />  
</LinearLayout> 

này sẽ thiết lập các nút để chiếm chỉ một nửa chiều dài màn hình.

+1

Điều này sẽ kéo dài các nút mặc dù. – hadi

Các vấn đề liên quan