5

Mam wyrównane do lewej TextView i przycisk wyrównany do prawej strony obok siebie. Chcę, aby przycisk zajmował tyle miejsca, ile potrzebuje po prawej (w zależności od tekstu, który się w nim znajduje) i lewy tekst, aby wypełnić tyle, ile się da, i elipsyzować przy każdym przepełnieniu.Android TextView i przycisk obok siebie, wielokąta w lewo TextView

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

Przeczytałem i wypróbowałem wiele innych postów, które wydają się mieć podobne problemy, z których żaden nie zadziałał u mnie. Próbowałem zarówno przy użyciu LinearLayout z ciężarami, jak i RelativeLayout z przypisanym layout_toLeftOf, z których żaden nie daje mi tego, czego potrzebuję.

To jest mój kod LinearLayout (z niepotrzebnymi częściami usuniętymi), w którym podaję lewy TextView element o wadze 1, a przycisk o wadze layout_weight równy 0. Powinno to dać prawemu przyciskowi wszystko, czego potrzebuje i podać TextView resztę, ale zamiast tego lewy tytuł przestaje się wyświetlać, a prawy przycisk zostaje przesunięty na bok i odcięty. Próbowałem zastąpić szerokości zarówno tekstu, jak i przycisku do 0dip, jak już sugerowałem, co nie zmienia niczego.

<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> 

Wymiana layout_weight z TextView z 0 faktycznie umożliwia przycisk z prawej strony, aby prawidłowo mieszczą się na ekranie w pełni, ale w lewo tekst nadal nie pojawia się. Jeśli dla elementu TextView i przycisku ustawię wartość 2 layout_weights, a następnie zmieniam szerokość TextView z 0dip na wrap_content, wszystko pokazuje się, ale zamiast tego przycisk jest przycinany, aby wypełnić pozostałą przestrzeń (a tekst wewnątrz jest obcięty).

Oto moja próba z 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> 

Wszystko dostosowuje porządku i pokazuje się z tym, że lewa TextView (gdy jest zbyt długi) nakłada się i pojawia się w górnej części przycisku zamiast obcinania i ellipsizing . Czy nie powinno być android: layout_toLeftOf "@ layout/action_buttons" określa, że ​​TextView powinien pozostać na lewej granicy przycisku?

Próbowałem pozornie wszystkiego, co mogę znaleźć na tej stronie związanych z tym problemem, i nadal nie mogę uzyskać rozwiązania. Każda pomoc będzie bardzo ceniona!

+0

ze swoimi ' Czy próbowałeś użyć metody RelativeLayout', czy wypróbowałeś 'android: layout_width =" wrap_content "', aby zapobiec 'nachodzeniu '' TextView' na 'Button', gdy tekst jest długi? – Squonk

+0

Tak, zarówno Android: layout_width = "wrap_content" i android: layout_width = "fill_parent" dla TextView dają taki sam problem nakładania się. – socoho

+0

Próbowałem przez około 30 minut w edytorze graficznym Eclipse i nie mogę znaleźć odpowiedzi - ale znowu układy nie są moim najmocniejszym punktem. Jeśli nie rozwiązałeś go w ciągu 48 godzin, dodaj tutaj komentarz zaczynający się od @MisterSquonk, który powinien mnie ostrzec - postawię nagrodę za pytanie, czy przyciąga ona wszystkich guru układu. Potrwa 48 godzin, zanim pytanie kwalifikuje się do nagrody. – Squonk

Odpowiedz

17

to załatwi za Ciebie:

<?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> 

Oto jak to wygląda w przypadku uruchomienia: Shorter Button

i znowu z przyciskiem z większym tekście: Longer Button

+0

Dziękuję bardzo! To działa :) okazuje się, że główną przyczyną mojego problemu jest niestandardowy przycisk, którego używam. – socoho

+2

Uwaga: w tym rozwiązaniu przycisk jest zawsze wyrównany do prawej ... wciąż próbuje znaleźć rozwiązanie, w którym prawy element przesuwa się w lewo, aby pozostawać obok tekstu, jeśli tekst jest mały – Thymine