viewpager romandanylyk relex pageindicatorview page dots circleindicator android viewpagerindicator

romandanylyk - me relex circleindicator circleindicator android



El estilo predeterminado falla para TabPageIndicator de ViewPagerIndicator. ¿Por qué y cómo solucionarlo? (3)

Me siento como un tonto, pero aquí está la solución extremadamente simple y obvia.

AndroidManifest.xml

... <activity android:name=".GalleryLists" android:theme="@style/Theme.PageIndicatorDefaults" ... > </activity> ...

Sí, todo lo que tenía que hacer era usar el tema. Esperemos que esto ayude a algún otro pobre alma perdida.

En lugar de explicar el problema, es mucho más fácil si te muestro:

Como puede ver, los títulos de las pestañas están todos combinados y completamente sin estilo. Funcionan correctamente al deslizar a través de las pestañas de los interruptores (aunque no hay ninguna indicación visible excepto el cambio de posición cuando sea apropiado) y al tocar una pestaña se cambia la vista, pero falta todo el estilo. Aquí está el código:

galerylists.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.viewpagerindicator.TabPageIndicator android:id="@+id/indicator" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/gallerypager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>

GaleríaListas.java

public class GalleryLists extends Activity { Context context; private static final String[] titles = new String[] { "20 Hottest", "20 Worst", "20 Awesomest", "MMA", "Comedy", "Moto", "Games" }; ViewPager listPager; ListPagerAdapter listPagerAdapter; PageIndicator indicator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gallerylists); context = this; listPagerAdapter = new ListPagerAdapter(); ViewPager.OnPageChangeListener changeListener = new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) {} @Override public void onPageSelected(int i) {} @Override public void onPageScrollStateChanged(int i) {} }; listPager = (ViewPager) findViewById(R.id.gallerypager); listPager.setAdapter(listPagerAdapter); listPager.setOnPageChangeListener(changeListener); indicator = (TabPageIndicator) findViewById(R.id.indicator); indicator.setViewPager(listPager); indicator.setOnPageChangeListener(changeListener); } private class ListPagerAdapter extends PagerAdapter { // Not important (I believe) } }

Eso es. Ahora, a menos que esté muy confundido a pesar de leer la documentación y examinar las muestras, no debería tener que tomar ningún paso adicional para usar el estilo predeterminado. Estoy en una pequeña pérdida.


Tengo el mismo problema, pero android:theme="@style/Theme.PageIndicatorDefaults" no se combina con el tema de mi aplicación.

Hay otra forma de personalizar, sobrescribiendo res/values/style.xml :

<resources> <style name="AppTheme" parent="android:Theme.Light" > <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item> </style> <style name="CustomTabPageIndicator" > <item name="android:gravity">center</item> <item name="android:background">@drawable/vpi__tab_indicator</item> <item name="android:paddingTop">12dp</item> <item name="android:paddingBottom">12dp</item> <item name="android:textAppearance">@style/TextAppearance.TabPageIndicator</item> <item name="android:textSize">15sp</item> <item name="android:maxLines">1</item> <item name="android:textColor">#FF555555</item> </style> </resources>


Una pequeña adición a la solución de Michaels: en caso de que ya esté utilizando un tema personalizado para su actividad, simplemente agregue estas dos líneas:

<item name="vpiIconPageIndicatorStyle">@style/Widget.IconPageIndicator</item> <item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item>