android tabs android-actionbar actionbarsherlock

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