2012-07-16 2 views
5

Come posso ottenere il seguente layout, con TextView che è un TextView con estremità ellissata e Vista che è wrap_content e immediatamente a destra di TextView?Android - Ellisse con visualizzazione allineata a destra

Ecco tre esempi di come il layout si deve comportare, con diversa larghezza TextView:

|[TextView] [View]    | 

|[TextView TextView] [View]  | 

|[TextView TextView T...] [View]| 

[Edit]

Il seguente TableLayout dà il comportamento corretto:

<TableLayout 
    android:id="@+id/upper_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_toLeftOf="@+id/alert_button" 
    android:shrinkColumns="0" 
    android:stretchColumns="2" > 

    <TableRow> 

     <TextView 
      android:id="@+id/name_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:ellipsize="end" 
      android:includeFontPadding="false" 
      android:lines="1" 
      android:paddingTop="2dp" 
      android:scrollHorizontally="true" /> 

     <TextView 
      android:id="@+id/unread_count_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:gravity="center" 
      android:includeFontPadding="false" 
      android:paddingBottom="0dp" 
      android:paddingLeft="5dp" 
      android:paddingRight="5dp" 
      android:paddingTop="2dp" /> 
    </TableRow> 
</TableLayout> 

I TableLayout utilizza 3 colonne, l'ultima è l'hack: la proprietà strechColumns fa in modo che occupi tutto lo spazio disponibile, quindi il secondo TextView è sempre immediatamente a destra del primo. Il primo TextView ellisse correttamente a causa della proprietà shrinkColumns.

Tuttavia, non mi piace l'idea di utilizzare uno TableLayout per raggiungere questo obiettivo. Qualcuno conosce un modo migliore?

Grazie

+0

È un elenco o no? – Yury

+0

Sì, è un layout di riga. – gdelente

risposta

0

Prova questo (non posso controllare ora, ma per il mio punto di vista dovrebbe funzionare):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="6dip" > 

    <TextView 
     android:id="@+id/my_txtvw_txtvw" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:ellipsize="marquee" 
     android:maxLines="1" /> 

    <TextView 
     android:id="@+id/my_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/my_txtvw_txtvw" 
     android:maxLines="1" /> 

</RelativeLayout> 
+0

Grazie, ma sfortunatamente, con questa soluzione, TextView corretto viene rimosso dallo schermo quando TextView sinistro è troppo lungo. – gdelente

0

Prova questo:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/text1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@+id/my_view" 
     android:ellipsize="end" 
     android:maxLines="1" 
     android:layout_alignParentLeft="true" 
     android:text="blablabla blablabla" 
     android:layout_centerVertical="true" 
     android:gravity="center_vertical|left" /> 

    <TextView 
     android:id="@+id/my_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:maxLines="1" /> 

</RelativeLayout> 

io non sono sicuro se vuoi android:ellipsize="end" o android:ellipsize="marquee". Penso che il layout funzionerà bene per te, basta sostituire l'id valore ellipsize necessario.

Fatemi sapere i vostri progressi ...

+0

Grazie yugidroid per la tua risposta. Hai messo 'alignParentRight =" true "' nella seconda vista. Il problema è che la vista sarà sempre allineata all'estrema destra. Voglio "my_view" che si trovi appena a destra di "text1". Una volta che il primo TextView ("testo1") è troppo lungo per adattarsi al genitore, "my_view" è allineato a destra e "text1" è ellissato. Rimozione 'alignParentRight =" true "' non ha aiutato perché "text1" viene spostato dallo schermo a sinistra di my_view. – gdelente