29 votes

La vue de recherche utilise l'icône de l'application au lieu du logo

Android documents expliquer que le logo de l'application est utilisé partout où il est défini. Mais lors de l'affichage de la recherche se développe, icône de l'application est utilisé à la place du logo de l'application et je ne peux pas trouver une façon de montrer le logo de l'application lors de l'affichage de la recherche est en état d'expansion.

Voici les parties pertinentes.

Le fichier de manifeste

<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 (icône de réglage ne change rien)

<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" />

Code D'Activité

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);

NOTE: j'utilise ABS SearchView mais la même chose se produit lorsque je passe à défaut SearchView.

EDIT : j'ai ajouté quelques captures d'écran pour plus de clarté.

Ici, j'ai utilisé l'image de l'étoile pour le logo de l'application, et android image pour l'icône de l'application. La première capture d'écran est la vue par défaut de l'activité. Le second est le point de vue lorsque je clique sur le bouton de recherche. Il montre l'android de l'image alors que je m'attends à être l'image de l'étoile.

enter image description here

enter image description here

20voto

Matthias Robbers Points 7755

Définissez le logo dessinable comme icône. Via l'attribut de thème

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

ou en code

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

10voto

Doctoror Drive Points 6721

Vous utilisez un SearchView complètement différent que vous avez déclaré dans menu.xml.

Avec ce code, vous créez un nouveau SearchView, ce qui n'est pas ce que vous voulez.

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

Essayez donc de créer un menu comme celui-ci.

 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);
 

Et pour l'ActionBar, au lieu de setDisplayUseLogoEnabled (true) et d'autres, essayez de définir toutes les options à la fois

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

C'est la configuration que j'ai dans mon projet actuel et je n'ai jamais rencontré de problèmes comme ceux-ci.

7voto

tkeunebr Points 146

J'ai eu le même problème et je l'ai résolu en utilisant le code suivant:

 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;
}
 

Faites-moi savoir comment cela fonctionne pour vous.

5voto

Superuser Points 61

J'ai obtenu la solution avec cette simple logique:

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);
    }

2voto

Shruti Points 3073

Pour remplacer l'icône avec un logo, indiquez votre logo d'application dans le fichier manifeste avec l' android:logo d'attribut, puis appelez setDisplayUseLogoEnabled(true) dans votre activité.

consultez ce document1 document2

Et s'il vous plaît voir cette réponse pour plus de détails

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X