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:
- Comportamiento de desplazamiento de AppBarLayout
- TabHost setCurrentTab sólo llama al método oncreate para Actividad en la pestaña una vez
- Cómo alinear el botón de radio en el centro de la pantalla
- Cómo actualizar la Lista cada vez que las pestañas están cambiando en vista pager
- Android: Cómo hacer una pestaña de la pestaña como el mercado de Android?
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?
- Tab host - setCurrentTab (x) funciona para la ficha, pero no un contenido
- Asignación de fragmentos a las pestañas de la barra de acciones con diferentes orientaciones
- ¿Cómo obtener el índice actual de la pestaña seleccionada en TabLayout?
- Mostrar iconos en las fichas FragmentPagerAdapter
- TabLayout contenido de la pestaña de actualización con una vista personalizada
- Android - ¿Cómo puedo localizar el indicador de pestañas entre las dos pestañas TextViews?
- ¿Cuál es la altura predeterminada en Androids TabLayout
- Cómo cambiar el color de la pestaña 'underbar' en actionbarsherlock
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