SlidingTabLayout sólo con iconos
Siguiendo este ejemplo, pude crear un SlidingTabLayout con iconos solamente pero me gustaría centrarlos. ¿Necesito crear una vista personalizada o hay otras soluciones?
Cualquier ayuda sería apreciada.
- ¿Cómo agregar la vista inferior a una disposición de coordinador con el paginador de la visión?
- Cualquier manera fácil y genérica en Android para obtener la raíz Vista de un diseño?
- Android Color - ¿Cuánto más oscuro es primaryColorDark que primaryColor?
- No se agrega el archivo de diseño xml de Android a R.java
- Mejor manera de programar botones / imágenes
- Quitar la casilla de verificación predeterminada del botón de radio cuando se utiliza un selector personalizado
- Seguir recibiendo eglMakeCurrent Error en el informe EGL_BAD_ALLOC cuando no estamos usando GLSurface en absoluto
- Añadir imagen de marca de agua en android
- Agregar CheckBox a la fila de lista pierde mis eventos onItemClick?
- ¿Definir un ancho de porcentaje para un LinearLayout?
- Android Linear Layout peso y teclado suave cuestión
- ¿Es posible crear un ToggleButton sin texto?
- Diseño de pantalla completa en Vista de desplazamiento
Finalmente i'v descubierto. Aquí está mi ejemplo de código …
Crear un dibujable para cada ficha, en mi caso i created store_tab.xml
y cart_tab.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_store_white_24dp" android:state_selected="true" /> <item android:drawable="@drawable/ic_store_grey600_24dp" /> </selector>
Cree su propio adaptador de buscapersonas, que se extiende desde FragmentPageAdapter
public class HomePagerAdapter extends FragmentPagerAdapter { private static int[] ICONS = new int[] { R.drawable.store_tab, R.drawable.cart_tab }; // ... @Override public CharSequence getPageTitle(int position) { return null; } @Override public int getCount() { return ICONS.length; } public int getDrawableId(int position) { return ICONS[position]; } }
Cree el siguiente método nuevo en SlidingTabLayout
protected ImageView createDefaultImageView(Context context) { ImageView imageView = new ImageView(context); int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); imageView.setPadding(padding, padding, padding, padding); int width = (int) (getResources().getDisplayMetrics().widthPixels / mViewPager.getAdapter().getCount()); imageView.setMinimumWidth(width); return imageView; }
A continuación, modifique el método populateTabStrip
dentro de SlidingTabLayout
private void populateTabStrip() { final HomePagerAdapter adapter = (HomePagerAdapter) mViewPager.getAdapter(); final View.OnClickListener tabClickListener = new TabClickListener(); for (int i = 0; i < adapter.getCount(); i++) { View tabView = null; //TextView tabTitleView = null; ImageView tabIconView = null; /*if (mTabViewLayoutId != 0) { // If there is a custom tab view layout id set, try and inflate it tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, false); tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); } if (tabView == null) { tabView = createDefaultTabView(getContext()); } if (tabTitleView == null && TextView.class.isInstance(tabView)) { tabTitleView = (TextView) tabView; }*/ if (tabView == null) { tabView = createDefaultImageView(getContext()); } if (tabIconView == null && ImageView.class.isInstance(tabView)) { tabIconView = (ImageView) tabView; } tabIconView.setImageDrawable(getResources().getDrawable(adapter.getDrawableId(i))); if (mViewPager.getCurrentItem() == i) { tabIconView.setSelected(true); } //tabTitleView.setText(adapter.getPageTitle(i)); tabView.setOnClickListener(tabClickListener); mTabStrip.addView(tabView); } }
Finalmente alter onPageSelected
dentro de InternalViewPageListener
@Override public void onPageSelected(int position) { for (int i = 0; i < mTabStrip.getChildCount(); i++) { mTabStrip.getChildAt(i).setSelected(false); } mTabStrip.getChildAt(position).setSelected(true); if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { mTabStrip.onViewPagerPageChanged(position, 0f); scrollToTab(position, 0); } if (mViewPagerPageChangeListener != null) { mViewPagerPageChangeListener.onPageSelected(position); } }
Resultado final