2017-09-20 5 views
1

J'essaie de comprendre comment implémenter un SearchView dans Android dans ma barre d'outils. Le problème est que selon les configurations que je choisis, j'obtiens des résultats d'interface différents.Les icônes de SearchView n'apparaissent pas dans Android

C'est la mise en page de mon activité:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    tools:context="com.construct.v2.activities.teams.ActivityTeams" 
    android:background="#ffffff" 
    android:id="@+id/relativeLayout"> 

    <include android:id="@+id/toolbar" layout="@layout/toolbar_shadow"/> 

    <ListView 
     android:id="@+id/listview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/toolbar" /> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBarLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/toolbar"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#ffffff" 
      app:tabMode="fixed" 
      app:tabGravity="fill" 
      app:tabIndicatorColor="#125688"/> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</RelativeLayout> 

Ceci est ma mise en page de toolbar_shadow:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/PopupMenuStyle" 
    android:id="@+id/my_awesome_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/actionBarSize" 
    app:titleTextColor="@android:color/black" 
    android:layout_alignParentTop="true" 
    android:gravity="right" 
    android:elevation="5dp"> 
    <TextView 
     android:id="@+id/delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="@dimen/s_text_size" 
     android:padding="@dimen/small_margin" 
     android:layout_gravity="right|end" 
     android:layout_marginEnd="@dimen/s_margin" 
     android:textColor="#000000" 
     android:text="@string/edit"/> 
</android.support.v7.widget.Toolbar> 

Et ceci est le fichier de mise en page pour mon article de recherche:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item android:id="@+id/search" 
     android:title="@string/search" 
     app:icon="@drawable/ic_search_black_24dp" 
     android:icon="@drawable/ic_search_black_24dp" 
     app:showAsAction="collapseActionView|ifRoom" 
     app:actionViewClass="android.support.v7.widget.SearchView" /> 
</menu> 

Avec cette configuration, j'obtiens cette sortie:

enter image description here

Mais si je clique sur la loupe je reçois ceci:

enter image description here

Si je commence à taper que je reçois ceci:

enter image description here

Je pensais qu'il était parce que j'ai cette configuration app:showAsAction="collapseActionView|ifRoom" mais j'ai essayé de changer à always mais j'ai obtenu cette sortie:

enter image description here

La loupe disparaît. Mais si je clique sur l'endroit où il est censé être je reçois cette sortie:

enter image description here

Quelle est la sortie correcte Je cherche, mais je ne sais pas pourquoi la loupe est pas à l'affiche .

Ceci est la partie de mon activité où j'Initialisez le SearchView:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_search_team, menu); 

    SearchManager searchManager = (SearchManager) 
      getSystemService(Context.SEARCH_SERVICE); 
    searchMenuItem = menu.findItem(R.id.search); 
    searchView = (SearchView) searchMenuItem.getActionView(); 

    ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); 
    searchClose.setImageResource(R.drawable.ic_action_cancel_black); 

    for (TextView textView : findChildrenByClass(searchView, TextView.class)) { 
     textView.setTextColor(Color.BLACK); 
     textView.setHintTextColor(Color.BLACK); 
    } 

    searchView.setSearchableInfo(searchManager. 
      getSearchableInfo(getComponentName())); 
    searchView.setSubmitButtonEnabled(true); 
    searchView.setOnQueryTextListener(this); 

    return true; 
} 

Et voilà comment j'initialiser ma barre d'outils:

@Override 
    protected void initToolbar() { 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     if(toolbar!=null) { 
      if (user_type == 1) { 
       toolbar.setTitle(R.string.collaborators_title); 
      } else if (user_type == 2) { 
       toolbar.setTitle(R.string.admin_title); 
      } 
      setSupportActionBar(toolbar); 
      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      toolbar.setNavigationIcon(R.drawable.ic_action_back_black); 
      //getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      //toolbar.setTitle("Teste"); 
      //toolbar.setTitleTextColor(Color.parseColor("#000000")); 
      //final TextView edit = (TextView) findViewById(R.id.delete); 
      //edit.setText(" "); 

      toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        onBackPressed(); 
       } 
      }); 
     } 
    } 

Répondre

0

Depuis que je ne vois pas le reste du code où vous implémentez la fonctionnalité pour le bouton x, je vais juste essayer de le faire. Ajoutez un écouteur lorsque l'utilisateur quitte la vue de recherche pour revenir à la vue avec la loupe. Dans cet auditeur ajouter cette ligne:

<Your activity>.findViewById(R.id.search).setVisibility(View.VISIBLE); 

Il pourrait être possible que le SearchView défini automatiquement en vue de invisible, mais vous ne réinitialiser la visibilité pour l'utilisateur.

+0

Merci pour la réponse! Malheureusement, j'ai essayé de définir la visibilité comme visible mais cela n'a pas fonctionné. –

0

Edit:

app:icon="@drawable/ic_search_black_24dp" 
android:icon="@drawable/ic_search_black_24dp" 

il y a une différence entre app: prefix et android: prefix. Avec la bibliothèque appcompat-v7, vous pouvez utiliser android: prefix et supprimer l'application: ligne d'icône.

app: showAsAction = "collapseActionView | ifRoom"

Modifier cette ligne
app:showAsAction="always|collapseActionView" Dans SearchView si nous ne choisissons que always comme showasAction puis flèche de retour n'est pas visible.

+0

Merci pour la réponse! Si je fais les changements que vous avez suggérés La loupe apparaît mais lorsque je clique dessus, les boutons "x" et "back" disparaissent. –

+0

@MarcosGuimaraes a fait U changer à toujours | collapseActionView parce que même j'ai fait face au même problème avec seulement toujours l'option mais quand j'ai changé à toujours | collapseActionView tout a bien fonctionné. –

+0

Oui, mais j'ai toujours la même sortie. –