una studio personalizar para ocultar iconos icono como celular cambiar app aplicaciones aplicacion android android-actionbar actionbarsherlock

android - studio - ocultar aplicaciones



La vista de búsqueda utiliza el icono de la aplicación en lugar del logotipo (9)

Los documentos de Android explican que el logotipo de la aplicación se usa en todas partes cuando está definido. Pero cuando la vista de búsqueda se expande, se usa el ícono de la aplicación en lugar del logotipo de la aplicación y no puedo encontrar una manera de mostrar el logotipo de la aplicación cuando la vista de búsqueda está en estado expandido.

Aquí están las partes relevantes.

Archivo de manifiesto

<application android:name="MyApp" android:allowBackup="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:logo="@drawable/app_logo" android:theme="@style/Theme.MyTheme" >

searchable.xml (el icono de configuración no cambia nada)

<searchable xmlns:android="http://schemas.android.com/apk/res/android" android:icon="@drawable/app_logo" android:label="@string/app_name" android:hint="@string/search_hint" > </searchable>

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_search" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:icon="@drawable/ic_search" android:showAsAction="always|collapseActionView" />

Código de actividad

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = new SearchView(getSupportActionBar().getThemedContext()); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); menu.findItem(R.id.menu_search).setActionView(searchView);

NOTA: uso ABS SearchView pero sucede lo mismo cuando cambio a SearchView predeterminado.

EDITAR: he añadido algunas capturas de pantalla para mayor claridad.

Aquí utilicé la imagen de la estrella para el logotipo de la aplicación, y la imagen de Android para el icono de la aplicación. La primera captura de pantalla es la vista predeterminada de la actividad. La segunda es la vista cuando hago clic en el botón de búsqueda. Muestra la imagen de Android mientras que espero que sea la imagen de la estrella.


Encontré que la mejor manera de resolver este problema era agregar SearchView programáticamente al menú de esta manera:

SearchView searchView = new SearchView(getActionBar().getThemedContext()); menu.add("Search") .setIcon(R.drawable.ic_action_search) .setActionView(searchView) .setOnActionExpandListener(new MenuItem.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { getActionBar().setIcon(R.drawable.ic_action_willyweather); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { return true; } }) .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM);

Y luego use onActionExpandListener para cambiar el icono / logotipo al valor correcto cuando se amplíe SearchView.

Esta solución también puede funcionar si define SearchView en menu.xml, pero aún así necesitará configurar onActionExpandListener () en el código para hacer lo mismo que en el ejemplo anterior.

Andy.


Estás utilizando un SearchView completamente diferente que declaraste en menu.xml.

Con este código creará un nuevo SearchView, que no es lo que quiere.

SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());

Así que intenta crear un menú como este.

this.getSupportMenuInflater().inflate(R.menu.menu, menu); final SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); final SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); final MenuItem searchItem = menu.findItem(R.id.menu_search); final SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setSearchableInfo(info);

Y para ActionBar, en lugar de setDisplayUseLogoEnabled (true) y otros, intente configurar todas las opciones a la vez

final ActionBar bar = getSupportActionBar(); bar.setDisplayOptions( ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_USE_LOGO | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);

Esta es la configuración que tengo en mi proyecto actual y nunca experimenté problemas como estos.


Establecer el logo dibujable como su icono. A través del atributo de tema

<item name="android:icon">@drawable/ab_logo</item>

o en codigo

getSupportActionBar().setIcon(R.drawable.ab_logo);


Lo único que necesitas configurar es esto (en onCreate of activity):

getSupportActionBar().setIcon(R.drawable.logo);

... no hay también un setLogo.

Independientemente de si tiene el ícono en el conjunto de manifiesto en algo diferente, esto le indicará a la actividad que use una imagen diferente durante el tiempo de ejecución.

He probado esto con el siguiente elemento de menú y funciona:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_search" android:icon="@drawable/ic_action_search" android:title="@string/search_hint" android:orderInCategory="1" android:actionViewClass="android.widget.SearchView" android:showAsAction="always|collapseActionView"/> </menu>

Inflado como normal en onCreateOptionsMenu:

getSupportMenuInflater().inflate(R.menu.search_menu, menu);


Logré la solución con esta simple lógica:

public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.menu_search: getActionBar().setIcon(R.drawable.your_logo); return true; } return super.onOptionsItemSelected(item); }


Para reemplazar el icono con un logotipo, especifique el logotipo de su aplicación en el archivo de manifiesto con el atributo android:logo , luego llame a setDisplayUseLogoEnabled(true) en su actividad.

consulte este document1 document2

Y por favor vea this respuesta para más detalles.


Simplemente elimine collapseActionView de su menú Xml.


Tuve el mismo problema y lo resolví usando el siguiente código:

menu.findItem(R.id.menu_search).setOnActionExpandListener(this); // Your Activity/Fragment must implement the MenuItem.OnActionExpandListener interface @Override public boolean onMenuItemActionExpand(MenuItem item) { getSherlockActivity().getSupportActionBar().setIcon(R.drawable.uvweb_logo); return true; }

Déjame saber cómo funciona esto para ti.


Tuve el mismo problema, (para ABS) tuve:

ActionBar actionBar = ((SherlockFragmentActivity) activity).getSupportActionBar(); actionBar.setLogo(R.drawable.logo);

Y acabo de añadir:

actionBar.setIcon(R.drawable.logo);

Y el problema se ha ido.