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 ().

  • Fragmento Tabhost Error: java.lang.IllegalStateException: No se conoce ninguna pestaña para la etiqueta null Cuando la conexión a Internet no está disponible
  • Android: Google Play como pestañas
  • (ActionBar) Tabs + Pager + detail Fragmentos dentro del contenedor ViewPager
  • Número de pestañas en ActionBar
  • Android Galaxy Tab: ¿Por qué el ícono de lanzamiento está rodeado por un borde rosa?
  • Configuración de la TAB seleccionada con un pequeño triángulo debajo de ella
  • Android ActionBar Tabs color de fondo modo dividido
  • ¿Puedo utilizar el estilo de tabulación predeterminado en mi vista de pestaña personalizada?
  • Ocultar el título de una barra de acciones no funciona en las versiones anteriores de Android (con ActionBarSherlock)
  • Las pestañas se muestran de forma diferente dependiendo de si Theme.NoTitleBar está establecido o no en el manifiesto
  • Botones en una vista personalizada cuando la vista personalizada se encuentra en una pestaña
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.