5

Ho un TextView allineato a sinistra e un pulsante allineato a destra affiancato. Voglio che il pulsante occupi tutto lo spazio necessario a destra (a seconda del testo che vi si trova dentro) e il testo a sinistra per riempirlo il più possibile e ellissi su qualsiasi overflow.TextView Android e pulsante side-by-side, ellissize a sinistra TextView

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

ho letto e ho cercato un sacco di altri posti che sembrano avere problemi simili, nessuno dei quali hanno lavorato per me. Ho provato a utilizzare sia un LinearLayout con pesi che un RelativeLayout con layout_toLeftOf assegnato, nessuno dei quali risulta in ciò di cui ho bisogno.

Questo è il mio codice LinearLayout (con parti inutili prese fuori), dove io ti do il TextView sinistra un layout_weight di 1 e il pulsante di un layout_weight 0. Questo dovrebbe dare il pulsante destro del lato tutto lo spazio di cui ha bisogno e dare il TextView il resto, ma invece il titolo di sinistra smette di mostrare e il pulsante di destra viene applicato a lato e tagliato. Ho provato a sostituire le larghezze del testo e del pulsante su 0dip come ho visto suggerito, che non cambia nulla.

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

Sostituzione della layout_weight del TextView con 0 permette in realtà il pulsante destra per adattarsi correttamente sullo schermo pieno, ma il testo a sinistra ancora non si presenta. Se ho entrambi i layout_weights impostati su 0 per il TextView e il pulsante, quindi cambio la larghezza del TextView da 0dip a wrap_content, tutto appare ma il pulsante viene squished per riempire lo spazio rimanente (e il testo all'interno viene troncato).

Ecco il mio tentativo con un 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> 

Tutto allinea bene e si presenta, salvo che il TextView sinistra (quando è troppo lungo) si sovrappone e appare in cima al tasto piuttosto che troncare e ellipsizing . Non dovrebbe androide: layout_toLeftOf "@ layout/action_buttons" specifica che TextView deve rimanere sul bordo sinistro del pulsante?

Ho provato apparentemente tutto quello che posso trovare su questo sito relativo a questo problema, e non riesco ancora a ottenere una soluzione. Qualsiasi aiuto sarebbe molto apprezzato!

+0

Con il ' RelativeLayout' tentativo, hai provato 'android: layout_width =" wrap_content "' per impedire a 'TextView' di sovrapporre il' Button' quando il testo è lungo? – Squonk

+0

Sì, entrambi Android: layout_width = "wrap_content" e android: layout_width = "fill_parent" per TextView danno lo stesso problema di sovrapposizione. – socoho

+0

Ho provato per circa 30 minuti nell'editor di layout di Eclipse e non riesco a trovare una risposta, ma di nuovo i layout non sono il mio punto di forza. Se non l'hai risolto in 48 ore, aggiungi un commento qui che inizia con @MisterSquonk e dovrebbe avvisarmi - Metterò una taglia sulla domanda per vedere se attira qualche guru del layout. Ci vogliono 48 ore prima che una domanda sia idonea per una taglia però. – Squonk

risposta

17

Questo farà il trucco per voi:

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

Ecco come si presenta quando viene eseguito: Shorter Button

E di nuovo con un pulsante con altro testo: Longer Button

+0

Grazie mille! Funziona :) Si scopre che la cosa principale che causa il mio problema è stato dal pulsante personalizzato che sto usando. – socoho

+2

Nota, con questa soluzione il pulsante è sempre allineato a destra ... ancora cercando di trovare una soluzione in cui l'elemento giusto si sposta a sinistra per rimanere accanto al testo se il testo è piccolo – Thymine