ActionBarSherlock: las pestañas que aparecen ABOVE barra de acciones con vista personalizada

Estoy tratando de crear una barra de acción sin el logotipo de la aplicación / texto, y con una imagen centralizada, y sé que es posible con una vista personalizada, aquí está mi código:

protected void initActionBar() { RelativeLayout custom = new RelativeLayout(getApplicationContext()); ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); custom.setLayoutParams(params); custom.setGravity(Gravity.CENTER); custom.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_grad_grey_rounded)); ImageView image =new ImageView(getApplicationContext()); image.setBackgroundResource(R.drawable.ic_launcher); custom.addView(image); ab = getSupportActionBar(); ab.setDisplayShowCustomEnabled(true); ab.setCustomView(custom); ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); tab_connect = ab.newTab(); tab_connect.setText("CONNECT"); tab_connect.setTabListener(this); tab_discover = ab.newTab(); tab_discover.setText("DISCOVER"); tab_discover.setTabListener(this); tab_simplify= ab.newTab(); tab_simplify.setText("SIMPLIFY"); tab_simplify.setTabListener(this); ab.addTab(tab_simplify); ab.addTab(tab_discover); ab.addTab(tab_connect); ab.setDisplayShowTitleEnabled(false); ab.setDisplayShowHomeEnabled(false); } 

Sin embargo, cuando oculto el logo, la barra de acción se desplaza debajo de mis pestañas de la siguiente manera:

captura de pantalla

Pero si establezco ab.setDisplayShowHomeEnabled (true) la barra de acción aparece en su lugar correcto (pero con el logotipo que no quiero):

Introduzca aquí la descripción de la imagen

¿Qué estoy haciendo mal?

He aquí una solución sencilla:

Utilice lo siguiente en su método onCreate:

 View homeIcon = findViewById(android.R.id.home); ((View) homeIcon.getParent()).setVisibility(View.GONE); 

Esto colapsa completamente el botón de inicio.

PS: estoy usando ActionBar estándar pero esto debería funcionar igual

O

Si quieres apoyar en Sherlock Actionbar a lo que tienes que usar esto

 actionBar.setLogo(null); // forgot why this one but it helped View homeIcon = findViewById( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.id.home : R.id.abs__home); ((View) homeIcon.getParent()).setVisibility(View.GONE); ((View) homeIcon).setVisibility(View.GONE); actionBar.setDisplayShowTitleEnabled(false); 

Vale la pena señalar que la respuesta seleccionada sólo funcionará con la ActionBar nativa porque el elemento android.R.id.home no existe en pre-hc. Es decir, en dispositivos pre-hc, obtendrá un NPE.

Puesto que usted está usando ActionBarSherlock, estoy asumiendo que usted quiere apoyar dispositivos pre-hc así que usted debe utilizar el id correcto basado en la versión de la plataforma. ABS expondrá el equivalente de android.R.id.home via R.id.abs__home para su implementación de la ActionBar.

Por lo tanto, podemos ajustar la solución propuesta como:

 View homeIcon = findViewById( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.id.home : R.id.abs__home); ((View) homeIcon.getParent()).setVisibility(View.GONE); 

Esto funciona muy bien! (Lea los comentarios de bugreport;))

 actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); 

Después de @furyfred respuesta, este código se puede utilizar cuando se utiliza el ActionBar de AppCompat biblioteca:

 View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.id.home : android.support.v7.appcompat.R.id.home); if (null != homeIcon && null != homeIcon.getParent()) { ((View) homeIcon.getParent()).setVisibility(View.GONE); } 

Todos los mensajes anteriores colapsan el icono de inicio pero dejando un espacio en blanco. Para evitar que usted necesita para establecer el tamaño del logotipo a cero. A continuación, agregó mi código snippet.it puede ayudar a otros que luchan con el mismo problema.

  actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); View homeIcon = findViewById( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.id.home : R.id.abs__home); ((View) homeIcon.getParent()).setLayoutParams(new LinearLayout.LayoutParams(0, 0)); ((View) homeIcon).setVisibility(View.GONE); 

Yo usé esto

 ActionBar ab = getSupportActionBar(); ab.setDisplayShowHomeEnabled(true); ab.setDisplayHomeAsUpEnabled(false); ab.setHomeButtonEnabled(false); ab.setLogo(null); View homeIcon = findViewById( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.id.home : R.id.abs__home); ((View) homeIcon.getParent()).setVisibility(View.GONE); ((View) homeIcon).setVisibility(View.GONE); ab.setDisplayShowTitleEnabled(false); 

Sólo eliminar el indicador DISPLAY_SHOW_HOME de su método actionBar.setDisplayOptions ().

  • Icono de la barra de acciones de Android png dimensions
  • Cómo crear estilo tabulado de Android con la vista de desplazamiento de página
  • Comparando La compatibilidad de la barra de acción de Android, el buscapersonas y las pestañas de muestra a ActionBarSherlock
  • Android Añadir pestaña dentro del fragmento
  • ¿Cómo cambio el fondo de un widget de pestaña de Android?
  • TabHost definido en el diseño está dando NullPointerException durante setContent
  • Widget de la pestaña siempre en los alfabetos de mayúsculas en Android 4.0
  • Función de parada que llama en pestañas
  • Android: ¿Cómo se ocultan las pestañas en la barra de acción?
  • Cambiar a otra pestaña más de una vez da EEROR
  • Tabulaciones de Android sin iconos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.