android - ActionBarSherlock-Pestañas que aparecen ARRIBA en la barra de acción con vista personalizada
tabs android-actionbar (7)
Aquí hay una solución simple:
Usa lo siguiente en tu método onCreate:
View homeIcon = findViewById(android.R.id.home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
Esto colapsa el botón de inicio por completo.
PD: estoy usando la barra de acción estándar pero esto debería funcionar igual
O
Si quieres apoyar en Sherlock Actionbar para que tengas que usar este
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);
Estoy tratando de crear una barra de acción sin el logotipo / texto de la aplicación, 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 logotipo, la barra de acción se desplaza por debajo de mis pestañas, por lo que:
pero si configuro ab.setDisplayShowHomeEnabled (verdadero), la barra de acción aparece en su lugar correcto (pero con el logotipo que no quiero):
¿Qué estoy haciendo mal?
Siguiendo la respuesta de @furyfred, este código se puede usar cuando se usa la ActionBar
de AppCompat
biblioteca AppCompat
:
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);
}
Todas las publicaciones anteriores contraen el icono de inicio pero dejan un espacio en blanco. Para evitar esto, es necesario establecer el tamaño del logotipo en cero. A continuación se agrega mi código snippet.it puede ayudar a otros que luchan con el mismo problema. Gracias
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);
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);
Vale la pena señalar que la respuesta seleccionada solo funcionará con la barra de acción nativa porque el elemento android.R.id.home no existe en pre-hc. Es decir, en los dispositivos pre-hc, obtendrá una NPE.
Dado que está utilizando ActionBarSherlock, supongo que desea admitir dispositivos pre-hc, por lo que debe usar la identificación correcta según la versión de la plataforma. ABS expondrá el equivalente de android.R.id.home a través de R.id.abs__home para su implementación de la barra de acción.
Por lo tanto, podemos ajustar la solución sugerida 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 también! (lea los comentarios del informe de error;))
actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));
simplemente elimine el indicador DISPLAY_SHOW_HOME de su método actionBar.setDisplayOptions ().