Ho 12 elementi nel layout di scheda scorrevole Android + visualizza il pager. Mentre si scorre da sinistra a destra, la scheda selezionata dovrebbe essere al centro di Play Store. Per favore aiutami come farlo. Nella mia scheda attiva dell'applicazione è sempre a sinistra dello schermo.Come allineare il centro di tabulazione attivo in Android Tab Layout scorrevole
risposta
Google ha fornito campione per sliding tab layout. Ma nell'implementazione della classe SlidingTabLayout, non è stato progettato per allineare il centro della scheda selezionata. Ho modificato il metodo di scorrimento per rendere il centro di tabulazione selezionato/attivo dello schermo. Ecco il cambiamento del codice:
Nome classe: Numero SlidingTabLayout
Linea: 241, scrollToTab {}
Aggiornato Metodo:
private void scrollToTab(int tabIndex, int positionOffset) {
final int tabStripChildCount = mTabStrip.getChildCount();
if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
return;
}
View selectedChild = mTabStrip.getChildAt(tabIndex);
if (selectedChild != null) {
int targetScrollX = selectedChild.getLeft() + positionOffset;
if (tabIndex > 0 || positionOffset > 0) {
// If we're not at the first child and are mid-scroll, make sure we obey the offset
targetScrollX -= (getWidth()-selectedChild.getWidth())/2;
}
scrollTo(targetScrollX, 0);
}
}
Non è necessario ottenere il display per misurare la larghezza della scrollview, basta chiamare getWidth();) i.e .: targetScrollX - = (getWidth() - selectedChild.getWidth())/2; –
Yuri Heupa, ha aggiornato la risposta. Grazie per il tuo suggerimento –
+1 Funziona :) Tuttavia, c'è un leggero strappo alla fine nel tentativo di posizionarlo al centro. Il sotto lo corregge. :) Buon lavoro però. –
Il mio approccio si differenzia un po 'della soluzione Shripad Bhat, che rimbalza la linguetta alla fine della diapositiva.
Ecco la mia soluzione ...
Modifiche a onPageScrolled
metodo:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
int tabStripChildCount = mTabStrip.getChildCount();
if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
return;
}
mTabStrip.onViewPagerPageChanged(position, positionOffset);
View selectedTitle = mTabStrip.getChildAt(position);
int selectedOffset = (selectedTitle == null) ? 0 : selectedTitle.getWidth();
int nextTitlePosition = position + 1;
View nextTitle = mTabStrip.getChildAt(nextTitlePosition);
int nextOffset = (nextTitle == null) ? 0 : nextTitle.getWidth();
int extraOffset = (int)(0.5F * (positionOffset * (float)(selectedOffset + nextOffset)));
scrollToTab(position, extraOffset);
if (mViewPagerPageChangeListener != null) {
mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
}
Modifiche a scrollToTab
metodo:
private int mLastScrollTo;
private void scrollToTab(int tabIndex, int positionOffset) {
final int tabStripChildCount = mTabStrip.getChildCount();
if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
return;
}
View selectedChild = mTabStrip.getChildAt(tabIndex);
if (selectedChild != null && selectedChild.getMeasuredWidth() != 0) {
int targetScrollX = ((positionOffset + selectedChild.getLeft()) - getWidth()/2) + selectedChild.getWidth()/2;
if (targetScrollX != mLastScrollTo) {
scrollTo(targetScrollX, 0);
mLastScrollTo = targetScrollX;
}
}
}
Ottimo compagno di lavoro. Funziona come un fascino :) +10 se potessi. :) –
LGTM, grazie! : D –
Grazie per te, è fantastico. Ma come creare la prima scheda nel centro? – NickUnuchek
avuto questo problema pure. tabLayout fornisce unica opzione tabContentStart, necessari entrambi i lati:
public class CenteringTabLayout extends TabLayout {
public CenteringTabLayout(Context context) {
super(context);
}
public CenteringTabLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CenteringTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
View firstTab = ((ViewGroup)getChildAt(0)).getChildAt(0);
View lastTab = ((ViewGroup)getChildAt(0)).getChildAt(((ViewGroup)getChildAt(0)).getChildCount()-1);
ViewCompat.setPaddingRelative(getChildAt(0), (getWidth()/2) - (firstTab.getWidth()/2),0,(getWidth()/2) - (lastTab.getWidth()/2),0);
}
}
il tuo codice lancia un'eccezione sulla riga che sta usando ViewCompat, potresti spiegare il tuo codice un po 'di più così posso capire cosa vuoi veramente fare. – EyadMhanna
Ho esteso android.support.design.widget.TabLayout. Il primo figlio è SlidingTabStrip e ogni scheda è uno dei suoi figli e sto cercando di impostare il padding su questo SlidingTabStrip Ma anche il mio non centra le ultime schede in modo corretto. Ancora non ha trovato perché. –
- 1. allineare il centro di testo con Android
- 2. come allineare il testo verticalmente al centro in Android
- 3. Android - Come allineare un centro di immagine rispetto al TextView
- 4. Come rendere attivo il tab bootstrap 3 nav di default?
- 5. Android allineare il testo in alto al centro
- 6. Come allineare il centro dei componenti in JPanel usando GridBagLayout?
- 7. android: come allineare l'immagine nel centro orizzontale di un'immagine?
- 8. Come rendere la scheda scorrevole in Android?
- 9. Come scorrere un layout scorrevole in Android Studio?
- 10. Come allineare il pulsante di azione mobile al centro
- 11. PyQt5: Centro allineare un'etichetta
- 12. set modalità testo allineare al centro in filatore in Android
- 13. come allineare un'immagine al centro di una pagina in ionico
- 14. Come allineare il centro un'etichetta personalizzata in Highcharts
- 15. Come allineare il testo al centro in etichetta asp
- 16. centro android allineare la scheda selezionata in tablaout
- 17. Come allineare un elemento al centro e sopra un altro elemento nel relativo layout?
- 18. Flexbox: allineare tra il fondo e il centro?
- 19. Allineare il paragrafo al centro della pagina
- 20. Come allineare verticalmente (al centro) il contenuto di UITableView?
- 21. Android layout relativa Allinea al centro
- 22. Allineare un pulsante al centro
- 23. Android: creazione di una vista scorrevole scorrevole
- 24. Come allineare gli elementi td nel centro
- 25. Come allineare i componenti JSF al centro
- 26. Centro di allineamento allineamento Android
- 27. android: come allineare il messaggio in alertDialog?
- 28. Come allineare il testo in Android
- 29. Come posso creare un layout scorrevole, come il menu principale di Android?
- 30. Controllo tabulazione WPF: effetto scorrevole sulla selezione di elementi di tabulazione
Stai usando [PagerTabStrip] (http://developer.android.com/reference/android/support/v4/view/PagerTabStrip.html) nel progetto (questo è ciò che sta utilizzando l'app Google Play). Sembra che tu stia utilizzando le schede normali. – Marko
No, ho usato la classe SlidingTabLayout che è fornita da google come classe di esempio per il layout a schede scorrevoli. Inoltre ho provato PagerTabStrip che non ti permette di scorrere il titolo della scheda come Play Store. SlidingTabLayout è esteso HorizontalScrollView. –
Vedo. Guardando questo [video] (https://www.youtube.com/watch?v=tRg_eDfQ8fk) dagli sviluppatori Android, puoi vedere che questo non è il comportamento previsto. Per ottenere l'effetto di Google Play, devi utilizzare ** PagerTabStrip **. È super facile da implementare, checkout [questo tutorial] (http://codetheory.in/android-pagertabstrip-pagertitlestrip-viewpager/). – Marko