Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo mostrar siempre las pestañas de ActionBar debajo de ActionBar en Android

He estado buscando para ver si hay alguna información sobre cómo mostrar siempre las pestañas ActionBar debajo de la ActionBar incluso cuando el teléfono está orientado a paisaje. Sé que automáticamente coloca las pestañas en la barra de acción dependiendo de si hay suficiente espacio en la pantalla para que se ajusten, pero quiero que siempre se fijan debajo de la ActionBar, incluso en el paisaje. Encontré una pregunta similar que no tenía una respuesta definitiva: Cómo mostrar las pestañas debajo de la barra de acción . También sé que muchas aplicaciones de Google, tales como; Google Play, Google Music, etc implementar este tipo de patrón de diseño, por lo que obviamente es alcanzable y aceptable como un patrón de diseño.

Estoy utilizando actualmente la biblioteca de ActionBarSherlock para crear mi navegación de las lengüetas de deslizamiento y realmente agradecería si alguien ha calculado hacia fuera cómo hacer esto ellos mismos. Gracias por adelantado.

  • OnNavigationItemSelected de la barra de acciones (int position, long itemId) no se dispara después de deslizar horizontalmente en Gingerbread
  • Mostrar teclado suave en la activación de la barra de acción de búsqueda con SearchView
  • Android Lint informe para mi proyecto sólo, excluyendo los proyectos de la biblioteca?
  • ¿Cómo prevenir los incendios onNavigationItemSelected cuando se inicia la actividad?
  • ActionBarSherlock (ABS): cómo personalizar el texto del modo de acción close item?
  • Imitando el cajón de navegación de la aplicación youtube / gmail
  • Aquí está mi código de actividad:

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewPager = new ViewPager(this); viewPager.setId(R.id.pager); setContentView(viewPager); tabsAdapter = new TabsAdapter(this, viewPager); // Declares the tabs adapter class with the view pager view actionBarTabs = getSupportActionBar(); actionBarTabs.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBarTabs.setCustomView(spinnerView); actionBarTabs.setDisplayShowCustomEnabled(true); /* Adds fragments to the tabs adapter */ tabsAdapter.addTab(actionBarTabs.newTab().setText("FRAG1"), Fragment_1.class, null); tabsAdapter.addTab(actionBarTabs.newTab().setText("FRAG2"), Fragment_2.class, null); tabsAdapter.addTab(actionBarTabs.newTab().setText("FRAG3"), Fragment_3.class, null); } 

    Y aquí está mi código TabsAdapter:

     public class TabsAdapter extends FragmentPagerAdapter implements ActionBar.TabListener , ViewPager.OnPageChangeListener { private final Context context; private final ActionBar actionBar; private final ViewPager viewPager; private final ArrayList<TabInfo> tabsList = new ArrayList<TabInfo>(); /** * TabInfo class * * Static class containing the tab information. * * @since 1.0 */ static final class TabInfo { private final Class<?> clss; private final Bundle args; TabInfo(Class<?> _class, Bundle _args) { clss = _class; args = _args; } } /** * Tabs adapter overload constructor. * * @param fragmentActivity sets the fragment activity to the adapter. * @param refViewPager sets the viewPager variable. * @see * @since 1.0 */ public TabsAdapter(SherlockFragmentActivity fragmentActivity, ViewPager refViewPager) { super(fragmentActivity.getSupportFragmentManager()); context = fragmentActivity; actionBar = fragmentActivity.getSupportActionBar(); viewPager = refViewPager; viewPager.setAdapter(this); viewPager.setOnPageChangeListener(this); } /** * Add tab method to add a tab to the list. * * @param tab sets the tab to be added to the tabs in the action bar. * @param clss sets the class variable in the TabInfo class. * @param args sets the bundle variable in the TabInfo class. * @see * @since 1.0 */ public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { TabInfo info = new TabInfo(clss, args); tab.setTag(info); tab.setTabListener(this); tabsList.add(info); actionBar.addTab(tab); notifyDataSetChanged(); } @Override public void onPageScrollStateChanged(int state) { } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { viewPager.setCurrentItem(tab.getPosition()); Object tag = tab.getTag(); for (int i = 0; i<tabsList.size(); i++) { if (tabsList.get(i) == tag) { viewPager.setCurrentItem(i); } } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public Fragment getItem(int position) { TabInfo info = tabsList.get(position); return Fragment.instantiate(context, info.clss.getName(), info.args); } @Override public int getCount() { return tabsList.size(); } } 

  • SherlockActionBar: Cómo ajustar CustomView contra actionBar
  • Obtener ActionBarSherlock actionBarSize en Android 2.x
  • Mover el sherlock de la barra de acción con el menú de navegación del cajón
  • Android appcompat barra de acción elemento de menú showAsAction no funciona
  • El selector de dispositivos Android muestra la X roja en la columna de destino
  • Problemas al importar proyectos en Android Studio con respecto a ActionBarSherlock
  • 3 Solutions collect form web for “Cómo mostrar siempre las pestañas de ActionBar debajo de ActionBar en Android”

    Tuve los mismos problemas con el modo de paisaje y encontré la solución aquí: http://andreimihu.com/blog/2013/10/17/android-always-embed-tabs-in-actionbar/

    Básicamente, el escritor quiere la pestaña dentro de barra de acción mientras tú y yo queremos que fuera. Por lo tanto, simplemente cambie la llamada al método a false (código del enlace anterior, pero un poco modificado):

     // This is where the magic happens! public void forceTabs() { try { final ActionBar actionBar = getActionBar(); final Method setHasEmbeddedTabsMethod = actionBar.getClass() .getDeclaredMethod("setHasEmbeddedTabs", boolean.class); setHasEmbeddedTabsMethod.setAccessible(true); setHasEmbeddedTabsMethod.invoke(actionBar, false); } catch(final Exception e) { // Handle issues as needed: log, warn user, fallback etc // This error is safe to ignore, standard tabs will appear. } } 

    En primer lugar, lo que describen como "muchas aplicaciones de Google, como Google Play, Google Music, etc implementar este tipo de patrón de diseño" no son necesariamente pestañas de navegación relacionadas con la ActionBar.

    Hay un montón de implementaciones que utilizan un viewPager con un indicador de título. Consulte la biblioteca PagerSlidingTabStrip para obtener una buena implementación.

    Además, debe comprobar la documentación oficial de Android donde habla en profundidad sobre la navegación con pestañas y muestra diferentes formas de obtenerlo. Consulte estas páginas en la documentación: Proporcionar navegación descendente y lateral y crear vistas de desplazamiento con pestañas

    Además, hay muchas respuestas sobre este tema en stackoverflow.com . La biblioteca que he sugerido ya se mencionó en esta respuesta: https://stackoverflow.com/a/16544501/529138 .

    Compruebe esta pregunta y las respuestas relacionadas también: Pestañas debajo de la barra de acción

    Estos recursos deben ser suficientes para ayudarle con la funcionalidad deseada 🙂

     actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME); 

    ActionBar.setLogo (null);

      View homeIcon = findViewById( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.id.home : android.support.v7.appcompat.R.id.home); ((View) homeIcon.getParent()).setVisibility(View.GONE); ((View) homeIcon).setVisibility(View.GONE); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.