avvolgere un layout con le visualizzazioni di testo

Ho un layout che assomiglia a questo:

  </      </ 

Ho usato FlowLayout per mostrare un elenco di visualizzazioni di testo (potrebbe contenere 10-15 visualizzazioni di testo). Quindi, in base allo spazio vuoto disponibile sullo schermo, voglio mostrare il numero di visualizzazioni testuali. Ad esempio, se ci sono 15 visualizzazioni di testo da mostrare lì e c’è spazio per 10 visualizzazioni di testo su uno schermo grande, voglio mostrare 9 visualizzazioni di testo e mostrare “+6” nell’ultima visualizzazione di testo. In uno schermo di piccole dimensioni lo spazio potrebbe essere disponibile solo per 5 visualizzazioni di testo, nel senso che voglio mostrare 4 visualizzazioni di testo con “+11” nell’ultima visualizzazione di testo. Per una comprensione chiara, ecco lo screenshot. Come puoi vedere, il numero effettivo di visualizzazioni testuali da visualizzare è 5. ma vengono visualizzati 2 e viene aggiunto +3. Allo stesso modo, in base allo spazio disponibile sullo schermo, voglio aggiungere il numero di visualizzazioni del testo nel layout.

Come può essere raggiunto a livello programmatico?

inserisci la descrizione dell'immagine qui

Prova ad aggiungere le visioni di testo in un ciclo, aggiungendo ognuna separatamente in un nuovo OnPreDrawListener. Dopo aver aggiunto ciascuno, controlla se supera lo spazio sulla riga e, in tal caso, rimuovilo e aggiungi il contatore. Se supera ancora la riga, rimuovine un’altra e aumenta il contatore.

La chiave è testare ciascuno in un OnPreDrawListener separato, quindi tutto accade prima che la vista venga mostrata, ma dopo che la vista ha avuto il suo layout e le dimensioni calcolate.

Prova ad aggiungere a livello di codice TextViews a un linearLayout in un ciclo for in cui dopo aver aggiunto ogni textView, ottieni la larghezza rimanente disponibile (può essere calcasting usando [ScreenWidth- (sum della larghezza di textview aggiunta + [no.di textview * margine / padding per ciascuno]) ] *)

Se la larghezza è inferiore a un certo minimo (supponiamo di aver bisogno di un minimo di 100 pixel per ogni vista testo), allora interrompi il ciclo e aggiungi il testo dell’indicatore del conteggio.

Posso pensare al codice qui sotto, potrebbe non essere preciso ma solo per mostrarti a cosa sto pensando

 int screenWidth = getScreenWidth(); int currentWidth=0; int minimumWidthForAChildWithOffset = 100;//offset should include width of indicator int childCount = 10; int paddingForEachChild = 15; for (int i = 0; i  

Se dovessi implementare qualcosa come hai descritto, proverei a onMeasure / sottoclass FlowLayout e ad aggiornare i suoi metodi onMeasure e onLayout .

Ecco il FlowLayout: https://github.com/blazsolar/FlowLayout/blob/develop/FlowLayout/src/main/java/com/wefika/flowlayout/FlowLayout.java

1) Il primo passo è limitare l’altezza di FlowLayout in onMeasure . Inoltre, potrebbe essere sufficiente fare qualcosa del genere:

      

2) Il secondo passaggio consiste nell’aggiornare onLayout , quindi interrompe l’aggiunta di linee e viste linea quando viene raggiunta l’altezza massima, quindi aggiunge la vista che visualizza il numero di viste nascoste