2012-03-19 27 views
5

Tôi đang cố gắng để có được 3 nút căn chỉnh (trái, giữa, phải). Tôi biết rằng nó có thể có thể được thực hiện với trọng lực nhưng tôi wam cố gắng để hiểu khái niệm layout_weight ở đây. Tôi đang sử dụng mã này:Tại sao các nút kéo dài để che tất cả layout_weight được phân bổ

<LinearLayout 
id=.. 
layout_width = "wrap_content" 
layout_height = "wrap_content" 
orientation="Horizonta" 
> 
<Button 
    id=1 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    layout_weight = "1" 
    text= "text" /> 

<Button 
    id=2 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    layout_weight = "1" 
    text= "text" /> 

<Button 
    id=3 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    layout_weight = "1" 
    text= "text" /> 
</LinearLayout> 

Tuy nhiên, tôi nhận được phần TOP của hình ảnh bên dưới. Đó là chính xác. Câu hỏi đặt ra là tại sao nút được kéo dài để bao phủ tất cả các vùng được phân bổ trong khi tôi đang sử dụng wrap_content? Làm cách nào để làm cho nó giống như hình ảnh BOTTOM?

enter image description here

Cảm ơn bạn

+0

Cảm ơn bạn! Tôi đã làm việc này trong hai giờ rồi! –

Trả lời

5

Các layout_weight được sử dụng để chỉ ra cách không gian miễn phí thêm trên màn hình nên được phân chia giữa các widget. Trong trường hợp này, chúng ta có ba nút có cùng layout_weight và do đó các nút sẽ phát triển như nhau cho đến khi tất cả không gian trống đều biến mất.

Phải thử một cái gì đó khác để có được các nút kích thước ban đầu và căn chỉnh mà chúng tôi muốn (trái - giữa - phải). Một vấn đề là LinearLayout nằm ngang không hoàn toàn hợp tác khi nói đến việc tôn trọng các tham số layout_gravity. Chúng tôi sẽ có thể sử dụng các tham số layout_gravity ảnh hưởng đến căn chỉnh theo chiều dọc nhưng ngang được bỏ qua bởi LinearLayout mẹ, thở dài một kết thúc khác.

Một giải pháp là đặt một cái gì đó ở giữa các nút để đẩy chúng vào đúng vị trí trên màn hình. Chế độ xem Không gian đã được giới thiệu trong API 14 (Ice Cream Sandwich) và phù hợp để sử dụng cho điều 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="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <Space 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight = "1" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <Space 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight = "1" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 

Chế độ xem không gian cũng có thể được thay thế bằng một vài TextView trống để thiết kế hoạt động trên các thiết bị chạy cấp API sớm hơn.

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.0" 
    android:text="" />  
+0

Câu trả lời hoàn hảo. Cảm ơn bạn – Snake

2

Khi trọng lượng được sử dụng, layout_width được Bỏ qua phần và chỉ có thuật toán cân được sử dụng và sau đó căng nguyên tố này.

1

Nút của bạn lấp đầy khoảng trống vì bạn sử dụng layout_weight="1" để các nút chiếm thêm không gian, cũng bởi vì thuộc tính layout_weight là 1 cho tất cả các nút, chúng sẽ có cùng dung lượng và có cùng kích thước. Bạn không thể có được bố cục dưới cùng đó bằng cách sử dụng layout_weight, sử dụng layout_gravity để định vị chúng (đây là một câu hỏi khác về số này What does android:layout_weight mean?).

Nếu bạn muốn hình ảnh dưới đây thử điều này:

<LinearLayout 
id=.. 
layout_width = "wrap_content" 
layout_height = "wrap_content" 
orientation="Horizonta" 
> 
<Button 
    id=1 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    android:layout_gravity="left" 
    text= "text" /> 

<Button 
    id=2 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    android:layout_gravity="center_horizontal" 
    text= "text" /> 

<Button 
    id=3 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    android:layout_gravity="right" 
    text= "text" /> 
</LinearLayout> 
Các vấn đề liên quan