11

TabLayout è impostato con ViewPager, ha un sacco di schede, MODE_SCROLLABLE e keyline app:tabContentStart="72dp".TabLayout scheda selezionata gravità

Quando l'utente seleziona una scheda, TabLayout tenta di far scorrere la scheda selezionata al centro. Vorrei che la scheda selezionata fosse allineata alla linea principale, non centrata. È possibile?

Libreria di supporto progettazione Android v22.2.0.

+0

Cosa intendevi per keyline? –

+1

"Keyline" è un termine utilizzato in https://www.google.com/design/spec/components/tabs.html, in Android Design Support Library è dichiarato tramite 'app: tabContentStart'. –

risposta

4

Se ho capito bene la tua domanda, puoi sottrarre la prima posizione della tabulazione dalla posizione della tabulazione selezionata. Quindi, devi semplicemente impostare il diverso come posizione per questa scheda selezionata.

7

Sfortunatamente il metodo calculateScrollXForTab() di TabLayout è privato e quindi non sostituibile da sottoclassi. In entrambi i casi è possibile copiare il TabLayout fonte nel progetto, poi eventualmente estenderla con la classe, e cambiare il metodo di calculateScrollXForTab() in questo modo:

private int calculateScrollXForTab(int position, float positionOffset) { 
    if (mMode == MODE_SCROLLABLE) { 
     View final selectedChild = mTabStrip.getChildAt(position); 
     // LoG.i ("scrollTo" String.valueOf ((int) selectedChild.getLeft())); 
     return (int) selectedChild.getLeft(); 
    } 
    return 0; 
} 

Ciò restituisce il valore del limite sulla sinistra della scheda selezionata, quindi lo scorrimento è forzato a quel valore. Le linguette dell'estrema destra rimarranno fisse nella posizione se selezionate perché la pergamena blocca lo scorrimento fino ai limiti del bambino.

ho provato e funziona, anche se ho dovuto risolvere due problemi con una CompatTextView non si trovano in android.support.v7.internal.widget e il metodo setupWithViewPager() che non esiste nella fonte a mia disposizione (I pensa una questione di versione)

Problemi correlati