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>