5

Tôi có một TextView được canh lề trái và một nút canh lề phải cạnh nhau. Tôi muốn nút chiếm nhiều không gian khi cần ở bên phải (tùy thuộc vào văn bản đi vào trong đó) và văn bản bên trái để lấp đầy nhiều nhất có thể và bỏ qua bất kỳ lỗi nào.Android TextView và Button cạnh nhau, bỏ qua bên trái TextView

|Long title that may or may not ellipsi... <Button with text>| 

Tôi đã đọc và thử nhiều bài đăng khác dường như có vấn đề tương tự, không có bài nào trong số đó có hiệu quả đối với tôi. Tôi đã thử cả hai bằng cách sử dụng một LinearLayout với trọng lượng cũng như một RelativeLayout với layout_toLeftOf được giao, không ai trong số đó là kết quả trong những gì tôi cần.

Đây là mã LinearLayout của tôi (với các phần không cần thiết được lấy ra), nơi tôi đặt TextView bên trái là layout_weight là 1 và nút layout_weight là 0. Điều này sẽ cung cấp cho nút bên phải tất cả không gian cần thiết và cung cấp TextView phần còn lại, nhưng thay vào đó, tiêu đề bên trái ngừng hiển thị và nút bên phải bị nhòe sang một bên và bị cắt. Tôi đã thử thay thế độ rộng của cả văn bản và nút thành 0dip như tôi đã thấy gợi ý, điều này không thay đổi bất cứ điều gì.

<LinearLayout 
    android:layout_height="@dimen/title_bar_height" 
    android:layout_width="fill_parent" 
    android:orientation="horizontal"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ellipsize="end" 
     android:layout_gravity="left|center_vertical" 
     android:gravity="left|center_vertical" 
     android:textSize="22sp" 
     android:lines="1"/> 
    <include layout="@layout/action_buttons" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0"/> 
</LinearLayout> 

Thay thế bố cục của TextView bằng 0 thực sự cho phép nút bên phải phù hợp hoàn toàn trên màn hình, nhưng văn bản bên trái vẫn không hiển thị. Nếu tôi đã đặt cả layout_weights thành 0 cho TextView và nút thì tôi thay đổi chiều rộng của TextView từ 0dip thành wrap_content, mọi thứ xuất hiện nhưng nút thay vào đó được xếp để lấp đầy khoảng trống còn lại (và văn bản bên trong bị cắt bớt).

Đây là nỗ lực của tôi với một RelativeLayout:

<RelativeLayout 
    android:layout_height="@dimen/title_bar_height" 
    android:layout_width="wrap_content"> 
    <include layout="@layout/action_buttons"/> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center_vertical" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@layout/action_buttons" 
     android:gravity="center_vertical" 
     android:scaleType="center" 
     android:textSize="22sp" 
     android:ellipsize="end" 
     android:lines="1"/> 
</RelativeLayout> 

Tất cả mọi thứ gắn tốt và xuất hiện, ngoại trừ việc TextView trái (khi nó quá dài) chồng lên và xuất hiện trên đầu trang của các nút chứ không phải cắt bỏ và ellipsizing . Không nên android: layout_toLeftOf "@ layout/action_buttons" chỉ định rằng TextView sẽ ở lại ranh giới bên trái của nút?

Tôi đã thử dường như mọi thứ tôi có thể tìm thấy trên trang web này liên quan đến vấn đề này và tôi vẫn không thể có giải pháp. Mọi sự trợ giúp sẽ rất được trân trọng!

+0

Với bạn ' Nỗ lực của RelativeLayout', bạn đã thử 'android: layout_width =" wrap_content "' để ngăn không cho 'TextView' trùng lặp' Nút' khi văn bản dài? – Squonk

+0

Có, cả android: layout_width = "wrap_content" và android: layout_width = "fill_parent" cho TextView cung cấp cùng một vấn đề trùng lặp. – socoho

+0

Tôi đã cố gắng khoảng 30 phút trong trình soạn thảo bố cục nhật thực và tôi không thể tìm thấy câu trả lời - nhưng sau đó bố cục lại không phải là điểm mạnh nhất của tôi. Nếu bạn đã không giải quyết nó trong 48 giờ, thêm một bình luận ở đây bắt đầu với @MisterSquonk và nó sẽ cảnh báo cho tôi - Tôi sẽ đặt một tiền thưởng vào câu hỏi để xem nếu nó thu hút bất kỳ bậc thầy bố trí. Phải mất 48 giờ trước khi một câu hỏi là đủ điều kiện cho một tiền thưởng mặc dù. – Squonk

Trả lời

17

này sẽ làm các trick cho bạn:

<?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" > 
    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left|center_vertical" 
     android:layout_weight="1" 
     android:ellipsize="end" 
     android:gravity="left|center_vertical" 
     android:singleLine="true" 
     android:text="Some really long textttttttttt tooooooooooo make the ellipsize work in the preview" 
     android:textSize="22sp" /> 
    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button Text" /> 
</LinearLayout> 

Đây là những gì nó trông giống như khi chạy: Shorter Button

Và một lần nữa với một nút với nhiều văn bản hơn: Longer Button

+0

Cảm ơn bạn rất nhiều! Điều này làm việc :) nó chỉ ra điều chính gây ra vấn đề của tôi là từ nút tùy chỉnh tôi đang sử dụng. – socoho

+2

Lưu ý, với giải pháp này, nút luôn được căn phải ... vẫn cố gắng tìm giải pháp trong đó phần tử bên phải di chuyển sang trái để ở bên cạnh văn bản nếu văn bản nhỏ – Thymine

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