14

Per ottenere un TextView per visualizzare (e agire amichevole con) Html corde il mio codice sembra qualcosa di simile:Come posso risolvere i problemi di visibilità del fuoco link Html.fromHtml (in ICS e Honeycomb)?

// itemHtml is a String of HTML defined above 

TextView itemContent = (TextView) findViewById(R.id.itemContent); 
itemContent.setText(Html.fromHtml(itemHtml)); 
itemContent.setMovementMethod(LinkMovementMethod.getInstance()); 

Se la stringa HTML ha un link, TextView risultati in collegamenti che sono cliccabili e attivabile. Quando l'utente si concentra su un collegamento specifico (ad esempio utilizzando il d-pad), il testo del collegamento cambia in modo significativo per mostrare che è stata ottenuta la messa a fuoco.

Il problema è che quando eseguo il test su questo stesso pattern utilizzando dispositivi dotati di d-pad utilizzando Honeycomb (ad esempio Google TV) o Ice Cream Sandwich di Android, il collegamento nel testo non mostra alcuna indicazione evidente che il collegamento ha messa a fuoco.

So che sta ottenendo lo stato attivo, perché quando si preme Invio si esegue l'azione specificata. Puoi anche muoverti tra i vari link nel testo; hai appena indovinato il link al quale sei attualmente, il che si traduce in un'esperienza utente molto negativa.

C'è qualcosa che sto facendo male? C'è un modo per risolvere il problema o aggirare questo problema?

risposta

1

Il modo in cui opera HTML.fromHTML è la creazione di "span" con effetti variabili nei vari caratteri della stringa. Una soluzione per questo sarebbe utilizzare ClickableSpan accoppiato con un altro degli StyleStyle per colorare il testo come cliccabile. Lo span precedente ti consentirà di registrare una richiamata e questa callback potrebbe essere la trasmissione di un intento per visualizzare un url (che aprirebbe un browser).

+0

Penso che tu abbia frainteso. Come ho detto, l'azione (cioè l'apertura dell'URL) viene invocata. Il problema è che non esiste alcuna rappresentazione visiva che il collegamento sia selezionato. – yydl

1

Gli elenchi di stato del colore del testo per Honeycomb + potrebbero non impostare lo stato focalizzato su un colore diverso o sostituire il colore in modo che sia costante.

controllare i colori + stili in your_android_sdk_directory/android-14/dati/res/

Impostazione del testo per Android: autoLink = "web" potrebbe anche aiutare?

1

Il modo migliore per farlo è aggiungere lo stile CSS al proprio html. So che Android supporta il selettore :hover. Così si potrebbe proprio qualcosa di simile:

String myLink = "<a href=\"http:\/\/google.com\">your link</a>" 
Html.fromHtml(myLink); 

e trovare un modo per includere i dati CSS ad esso: (io non sono sicuro di come, ma credo che sia possibile)

a :hover { 
    color: red; 
} 

UPDATE:

Penso che la risposta alla tua domanda sia there.

2

Edit: Dopo essere andato un po 'noci, alla fine ho pensato ho trovato una soluzione. Tuttavia, questa soluzione funziona solo per Honeycomb. ICS non è ancora stato risolto!

A partire da API 11, Android ha una nuova impostazione su TextViews per definire se il testo è selezionabile.

È possibile impostare utilizzando setTextIsSelectable(true) su una TextView, o di definirlo nel layout XML android:textIsSelectable="true"

E 'probabilmente meglio definirlo in XML, in modo che il mantenimento di retrocompatibile l'applicazione è banale.Assicurati solo di scegliere la versione di targeting> = 11 o probabilmente riceverai un errore.

+0

L'ho provato, funziona, grazie – junto

+0

@junto sei il benvenuto. Funziona anche su ICS? – yydl

Problemi correlati