Usar pestaña con nueva barra de herramientas (AppCompat v7-21)
Estaba usando SupportActionBar con pestañas y un tema ActionBar personalizado (creado con http://jgilfelt.github.io/android-actionbarstylegenerator / ), que muestran las pestañas solo cuando el usuario expande la vista de búsqueda.
public boolean onMenuItemActionExpand(MenuItem item) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
return true;
}
}
Migré de ActionBar a Toolbar. Mi aplicación realmente necesita soportar API 9.
¿Hay alguna manera de usar este código para agregar las pestañas de nuevo?:
Toolbar toolbar = (Toolbar) findViewById(R.id.new_actionbar);
setSupportActionBar(toolbar);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Si es posible, ¿cómo puedo usar mi tema personalizado o estilo de la barra de herramientas?
La documentación dice que esto está obsoleto y sugiere usar un tipo diferente de navegación. Pero no conozco ningún otro componente en Android que tenga la misma funcionalidad.
¿Alguna ayuda?
2 answers
Con la API 21 el método setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
es obsoleto.
Puedes usar un patrón diferente. Por ejemplo, puedes usar el mismo ejemplo que puedes ver en googleio14.
Utiliza un SlidingTabLayout
que funciona con un ViewPager
.
Aquí puede encontrar el ejemplo (está en su ejemplo de sdk)
Aquí puedes encontrar el ejemplo de Google io14:
ACTUALIZAR 29/05/2015
Con la nueva Biblioteca de Soporte de diseño ahora puede usar la nueva TabLayout .
Simplemente agregue esta dependencia a su build.gradle
compile 'com.android.support:design:22.2.0'
El código es muy simple:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Para implementar muchas de las características de los diseños de materiales, debe usarlo dentro de un CoordinatorLayout y a AppBarLayout.
Algo como esto:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent">
<android.support.v7.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways"/>
<android.support.design.widget.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-23 02:41:33
Aunque probablemente sea un poco tarde para responder a esta pregunta ahora, me di cuenta de que escribí una respuesta a una pregunta similar que cubre tanto el uso de la Biblioteca de Soporte de Diseño como antes de Google I/O.
He incluido las partes esenciales a continuación:
Usar un TabLayout
con el Toolbar
se ha vuelto mucho más simple desde el anuncio de la Biblioteca de Soporte de Diseño de Android , lo que significa que ya no necesitamos descargar clases de vista personalizadas.
Tabs :
Cambiar entre diferentes vistas en su aplicación a través de pestañas no es un concepto nuevo para material design y están igualmente en casa como un patrón de navegación de nivel superior o para organizar diferentes agrupaciones de contenido dentro de su aplicación (por ejemplo, diferentes géneros de música).
La biblioteca de diseño TabLayout implementa ambas pestañas fijas, donde el ancho de la vista se divide por igual entre todas las pestañas, así como pestañas desplazables, donde las pestañas no tienen un tamaño uniforme y pueden desplazarse horizontalmente. Las pestañas se pueden agregar mediante programación:
TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
Sin embargo, si está utilizando un ViewPager para la paginación horizontal entre pestañas, puede crear pestañas directamente desde su PagerAdapter's getPageTitle() y luego conectar dos juntos usando
setupWithViewPager()
. Esto garantiza que los eventos de selección de pestañas actualicen el ViewPager y los cambios de página actualicen la pestaña seleccionada.
Si no está utilizando la biblioteca de soporte de diseño, tendrá que hacer lo siguiente:
1. Descargar el SlidingTabLayout.java
y SlidingTabStrip.java
archivos de la aplicación de Conferencia de E/S de Google en GitHub. Estas serían las vistas que se usarían en el diseño de pestañas, así que creé una carpeta con mis otras actividades Java llamado 'view' y los colocó allí.
2. Edita tu diseño para incluir el SlidingTabLayout
:
<LinearLayout
android:orientation="vertical"
... >
<!-- This is the Toolbar with the tabs underneath -->
<LinearLayout
android:orientation="vertical"
... >
<include android:id="@+id/my_toolbar" layout="@layout/toolbar" />
<com.mycompany.myapp.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:background="?attr/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- This is the ViewPager (which you already should have if you have
used tabs before) -->
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
...
</LinearLayout>
La línea que hace referencia a la Toolbar
(<include android:id="@+id/detail_toolbar" layout="@layout/toolbar" />
), está haciendo referencia a otro archivo XML que había utilizado para hacer el Toolbar
.
3. Cambie los nombres de los paquetes en SlidingTabLayout.java
y SlidingTabStrip.java
correspondientes al lugar donde se colocaron. En mi caso, usé algo similar a: package com.mycompany.myapp.view;
para ambos archivos. Organizar las importaciones y añadir las necesarias, como ha señalado el IDE estás consumiendo.
4. En su Activity
(que se extendía AppCompatActivity
), configure el Toolbar
en el método onCreate
:
Toolbar toolbar = (Toolbar) findViewById(R.id.detail_toolbar);
setSupportActionBar(toolbar);
5. Configura las partes ViewPager
y SlidingTabLayout
:
mViewPager = (ViewPager) findViewById(R.id.view_pager);
mViewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setSelectedIndicatorColors(getResources().getColor(R.color.tab_line));
mSlidingTabLayout.setDistributeEvenly(true);
mSlidingTabLayout.setViewPager(mViewPager);
El color 'tab_line
' era un color que había declarado en color.xml
que sería el color del indicador de línea de tabulación. También tenga en cuenta que las variables anteriores eran globales que definí anteriormente en esta actividad:
SlidingTabLayout mSlidingTabLayout;
ViewPager mViewPager;
6. Finalmente, configure el ViewPagerAdapter
que Había llamado antes. Esto sería responsable de cambiar la página dependiendo de la pestaña seleccionada. Usé el siguiente código:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
// Returns the number of tabs
return 3;
}
@Override
public Fragment getItem(int position) {
// Returns a new instance of the fragment
switch (position) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
case 2:
return new FragmentThree();
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
case 2:
return getString(R.string.title_section3).toUpperCase(l);
}
return null;
}
}
Como mencioné anteriormente, más detalles de estas soluciones están disponibles en otra pregunta que respondí, sobre el uso de pestañas deslizantes con la Barra de herramientas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:51