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:
- Tabindicator no se desliza de una a otra ficha en tablayout cuando deslizo entre fragmentos. El resaltado de la fuente tampoco está cambiando
- Android: Google Play como pestañas
- ¿Cómo hacer que el tamaño de tablayout sea igual?
- Botones en una vista personalizada cuando la vista personalizada se encuentra en una pestaña
- ¿Cómo configurar la pestaña predeterminada de múltiples vistas panorámicas con pestañas?
Pero si establezco ab.setDisplayShowHomeEnabled (true) la barra de acción aparece en su lugar correcto (pero con el logotipo que no quiero):
¿Qué estoy haciendo mal?
- ¿Podemos establecer una imagen de fondo en pestañas?
- Activar / Desactivar ficha en ActionBar
- TabLayout contenido de la pestaña de actualización con una vista personalizada
- Android: pestañas de las aplicaciones "Noticias y clima"
- El tipo ActionBar.Tab está obsoleto
- ¿Es posible cambiar el indicador de pestaña de la barra de acciones programáticamente?
- Cómo actualizar la Lista cada vez que las pestañas están cambiando en vista pager
- OnTabSelected Seleccionado No llamado
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 ().
- Java.lang.InstantiationException: class no tiene constructor de argumento cero
- Android: establece un borde alrededor de un ImageView