Android: Làm thế nào để tăng lượt xem để lấp đầy không gian có sẵn?


90

Điều này có vẻ đơn giản, nhưng tôi không thể tìm ra cách thực hiện. Tôi có một bố cục ngang với một EditText và hai ImageButtons. Tôi muốn ImageButtons có kích thước cố định và EditText chiếm không gian còn lại trong bố cục. Làm thế nào điều này có thể được thực hiện?

<LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <EditText 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </EditText>
        <ImageButton 
            android:src="@drawable/img1"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
</LinearLayout>

Câu trả lời:


51

thử cái này trong bố cục tương đối

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <ImageButton 
        android:id="@+id/btn1"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_alignParentRight="true"/>
    <ImageButton 
        android:id="@+id/btn2"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_toLeftOf="@+id/btn1"/>
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/btn2">
    </EditText>

</RelativeLayout>

4
Cảm ơn bạn. Điều này hoạt động tuyệt vời. (Ngoại trừ việc ImageButtons phải được xác định trước EditText, như Joseph đã lưu ý).
ab11

1
fill_parent - Hằng số này không được dùng nữa bắt đầu từ API cấp 8 và được thay thế bằng {@code match_parent}.
Zon,

147

Nếu bạn muốn giữ nguyên bố cục (tức là các nút sau văn bản), hãy sử dụng thuộc layout_weighttính cùng với fill_parent, do đó:

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <EditText 
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </EditText>
    <ImageButton 
        android:src="@drawable/img1"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
    <ImageButton 
        android:src="@drawable/img2"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
 </LinearLayout>

Đưa ra EditText'trọng lượng' làm cho nó được tìm ra cuối cùng và ưu tiên cho các nút. Chơi với các layout_weights khác nhau và xem bạn có thể có bao nhiêu niềm vui!


1
Cảm ơn bạn. Tôi có trong cách bố trí của tôi 3 khu vực (tiêu đề, trang nội dung WebView và chân trang) nó giải quyết vấn đề bằng cách thiết lập WebView layout_weight = 1 và layout_weight chân của = 0.
MKK

Không biết mẹo đặt cân nặng và 0dp cho chỉ một đứa trẻ .. Cảm ơn bạn!
Marcel Bro

1
đây có được coi là phương pháp hay nhất không? Thật thú vị khi bạn có thể tác động đến thứ tự mà android phân giải các lượt xem.
Cypress Frankenfeld

2
chiều rộng nên được giữ 0 Tôi nghĩ rằng
Bibaswann Bandyopadhyay

19

Được chứ:

<RelativeLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

        <ImageButton 
            android:id="@+id/button1"
            android:src="@drawable/img1"
            android:layout_width="50dip"
            android:layout_alignParentTop="true" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/button1"
            android:layout_height="50dip">
        </ImageButton>
        <EditText 
            android:layout_below="@id/button"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">
        </EditText>
</RelativeLayout>

Các điểm chính của bố cục là:

  • Các mục có kích thước cố định được đặt đầu tiên trong bố cục, theo cách này khi Android tính toán chiều cao của chiều cao của các mục fill_parentsau đó trong tệp, nó chỉ tính đến không gian còn lại, không phải tất cả không gian mà nó có thể chiếm nếu không có gì khác ở đó
  • EditText có chiều cao là fill_parent( match_parenttrong 2,2+) để nó chiếm phần còn lại của không gian có sẵn

Xin lỗi đã không đọc câu hỏi của bạn sẽ đủ. Đoạn mã trên cung cấp câu trả lời nếu bạn muốn làm điều đó theo chiều dọc. Đối với bố cục ngang, mã do @Sunil đăng sẽ hoạt động.


Cảm ơn Joseph. Điều này có hiệu quả. Tuy nhiên, tôi đã ghi công cho Sunil vì đã nhanh hơn một chút.
ab11

13

Sử dụng đặt layout_widthhoặc layout_heightthành 0dp(Theo hướng bạn muốn lấp đầy không gian còn lại). Sau đó, sử dụng layout_weightđể làm cho nó lấp đầy không gian còn lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.