2015-11-23 17 views
7

Uno schermo nella mia app potenzialmente posterà stringhe veramente lunghe in uno TextView. Per questo scenario, ho impostato android:ellipsize="marquee" in modo che il testo si sposterà su TextView.Setting textIsSelectable su TextView con ellissi di selezione aggiunge ellisse

Tuttavia, ho deciso che desidero che questo testo sia selezionabile (android:textIsSelectable="true"). Nella maggior parte dei casi, questo non è un problema. Il testo è più piccolo di TextView e l'utente può semplicemente selezionarlo. Tuttavia, se ho l'attributo textIsSelectable e se il testo è più grande di TextView, il testo prenderà un'ellisse invece di essere la stringa completa. Continuerà a selezionare lo, ma non visualizzerà più il testo completo. Lo taglia e visualizza un'ellisse.

<TextView 
     android:layout_width="wrap_content" 
     android:layout_height="?android:attr/listPreferredItemHeightSmall" 
     android:ellipsize="marquee" 
     android:focusable="true" 
     android:gravity="center_vertical" 
     android:singleLine="true" 
     android:textIsSelectable="true"> 

C'è un modo per avere il testo selezionabile e mantenere l'intera stringa nel tendone (senza ellisse)?

+0

Cosa vuoi esattamente? –

+1

Si desidera selezionare il testo e anche scorrere il testo in textview/ –

+0

Sì. Questo è quello che voglio. – Andrew

risposta

1

Non si può essere sicuri se questo è un bug.

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="?android:attr/listPreferredItemHeightSmall" 
    android:ellipsize="start" 
    android:focusable="true" 
    android:gravity="center_vertical" 
    android:singleLine="true" 
    android:textIsSelectable="true"/> 

Si noti che stiamo impostando android:ellipsize="start" in XML - più in seguito.

mTextView = (TextView) findViewById(R.id.tv); 
mTextView.post(new Runnable() { 
    @Override 
    public void run() { 
     mTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE); 
     mTextView.setSelected(true); 
    } 
}); 

setEllipsize(TruncateAt) verifica se il valore corrente ellipsize è uguale a quello fornito. Per ovviare a questo, forniamo android:ellipsize="start" in xml. In questo modo, il TextView non ha problemi ad accettare in seguito TextUtils.TruncateAt.MARQUEE.

Ora, anche se questo funziona, suggerirò di non farlo. Sarai in grado di capire perché - una volta provato questo codice. Sembra che textIsSelectablenon sia utilizzato con marquee - le maniglie di selezione non si spostano con il testo.

Tutto sommato, sembra estremamente abbozzato.