2010-11-15 45 views
51

Tôi muốn đặt một nút bên cạnh EditText và tôi muốn chiều cao của chúng khớp nhau.Cách lấy chiều cao của nút để phù hợp với chiều cao của một phần tử khác?

Ví dụ, từ việc xây dựng trong trình duyệt Android:

alt text

Nút Go là chiều cao tương tự như các lĩnh vực EditText. Tôi biết tôi có thể bọc cả hai chế độ xem này trong chế độ xem bố cục gốc và đặt cả hai chiều cao của chúng thành fill_parent và điều đó sẽ làm cho chúng phù hợp. Tuy nhiên, tôi muốn làm điều này mà không cần phải bố trí một kích thước tĩnh. Tôi thà có EditText mất bất kỳ chiều cao nào nó cần dựa trên kích thước phông chữ và sau đó có nút bên cạnh nó phù hợp với bất kỳ chiều cao có thể được.

Điều này có thể thực hiện với bố cục xml không?

+1

Câu hỏi này cần được cập nhật để bao gồm ConstraintLayout mới. –

Trả lời

27

Bạn cần phải thực hiện EditTextwrap_content trên chiều cao và có Button chỉ fill_parent. Bạn sẽ cần phải có cả hai gói trong một phụ huynh Layout. Bằng cách đó, chúng được liên kết với cùng một phụ huynh Layout.

Hãy thử điều đó và xem cách hoạt động, nếu nó giúp tôi biết. Nếu nó không có thể tôi có thể cung cấp cho bạn một số mã sẽ giúp bạn ra ngoài.

+0

Cảm ơn bạn đã đề nghị giúp đỡ nhưng câu trả lời của Falmarri đã hoạt động hoàn hảo vì vậy tôi đã sẵn sàng. Cảm ơn một lần nữa. – cottonBallPaws

+0

Trên thực tế, sau khi cố gắng thực hiện điều này mà không có chế độ xem trình bao bọc, tôi không thể hiển thị nút ở bên phải văn bản chính xác vì vấn đề tôi đã mô tả để trả lời câu trả lời của Falmarri. Sử dụng phương pháp của bạn tôi đã có thể nhận được các nút có kích thước và đặt một cách chính xác, vì vậy tôi sẽ đánh dấu của bạn như là câu trả lời. – cottonBallPaws

57

Có lẽ là EditTextButton nằm trong một số RelativeLayout. Đặt thuộc tính bố cục của nút thành alignTopalignBottom của EditText.

+2

Điều này làm việc đẹp và không đòi hỏi một wrapper, cảm ơn bạn rất nhiều. – cottonBallPaws

+2

Làm cách nào để tôi nhận được EditText được đặt ở bên trái của nút? Tôi đã thử sử dụng layout_toLeftOf = "id của nút" trên EditText nhưng vì Button được khai báo sau EditText trong tệp xml, tôi nhận được lỗi rằng id của nút không tồn tại. Tôi không thể đảo ngược chúng bởi vì tôi có cùng một vấn đề, nút này đề cập đến id của EditText cho căn chỉnh như bạn đã mô tả. Bất kỳ đề xuất về cách đối phó với điều này? Cảm ơn – cottonBallPaws

15

Điều bạn muốn là bố cục tương đối. Ví dụ về một số nhận xét như sau

Chúng tôi bắt đầu với điều này RelativeLayout làm cha mẹ. Điều đó có thể bao trùm tất cả nội dung. Trong bố mẹ đó, chúng tôi đặt 2 phần tử, nút và editText từ ví dụ của bạn.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

Chúng tôi bắt đầu bằng cách đặt phần tử Nút ở góc trên cùng bên phải. Đó là những gì mà layout_alignParentRightlayout_alignParentTop là tất cả. Một lần nữa đây là phần tử lớn nhất, do đó chúng tôi sẽ để nó bọc tất cả nội dung bằng cách sử dụng wrap_content cho cả chiều cao và chiều rộng.

<Button 
    android:id="@+id/Button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:text="some_text" /> 

Bây giờ là yếu tố thứ hai, EditText chúng tôi muốn canh lề về phía bên trái của phần tử trước đó của chúng tôi, sử dụng tài liệu tham khảo id với tham số layout_toLeftOf để thực hiện điều đó.

<EditText 
    android:id="@+id/EditText1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@+id/Button1" 
    android:hint="some_hint" 
    android:inputType="textCapWords" /> 

Đóng RelativeLayout và bây giờ làm điều này để xem những gì bạn có thể đã tự mình làm.

</RelativeLayout> 

enter image description here

Kể từ khi EditText nhỏ về chiều cao nó sẽ không phù hợp với nút nó được đặt bên cạnh. Giải pháp cho điều đó là thêm một số thông số bố cục khác.Những thứ ma thuật bạn đang tìm kiếm là layout_alignBottomlayout_alignParentTop.

android:layout_alignBottom="@+id/Button1" 
    android:layout_alignParentTop="true" 

Thêm 2 và bạn có bố cục phù hợp.

enter image description here

+0

sẽ không hoạt động đối với bố cục tuyến tính! –

+2

@farhan patel đó là lý do tại sao tôi bắt đầu giải thích bằng cách nói rằng bạn cần bố cục tương đối ;-) – hcpl

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