Je suis actuellement en train d'apprendre à convertir mon application en Material Design et je suis un peu bloqué en ce moment. J'ai ajouté la barre d'outils et j'ai superposé tout le contenu de mon tiroir de navigation.
J'essaie maintenant de créer une recherche extensible qui ressemble à celle des directives matérielles :
c'est ce que j'ai en ce moment et je ne peux pas comprendre comment faire comme ci-dessus:
Ceci est mon menu xml:
<?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/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="Search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
Cela fonctionne, j'obtiens un élément de menu qui se développe en SearchView et je peux filtrer ma liste très bien. Cela ne ressemble en rien à la 1ère photo.
J'ai essayé d'utiliser MenuItemCompat.setOnActionExpandListener()
pour R.id.action_search
que je puisse changer l'icône d'accueil en flèche arrière, mais cela ne semble pas fonctionner. Rien n'est renvoyé dans l'auditeur. Même si cela fonctionnait, cela ne serait toujours pas très proche de la 1ère image.
Comment créer un SearchView dans la nouvelle barre d'outils appcompat qui ressemble aux directives relatives aux matériaux?
Réponses:
C'est en fait assez facile à faire si vous utilisez une
android.support.v7
bibliothèque.Étape 1
Déclarer un élément de menu
Étape 2
Étendez
AppCompatActivity
et dans laonCreateOptionsMenu
configuration le SearchView.Résultat
la source
navigate-back
bouton, mais plutôt une icône de recherche, et sa distance par rapport au bord gauche de l'écran n'est pas la même que celle entre l'X
icône et le bord droit de l'écran (je n'ai pas débordement d'action). Posté la question ici , pouvez-vous l'examiner?searchView.setIconifiedByDefault(false);
à laonCreateOptionsMenu
fonction.app:showAsAction="always"
et NONapp:showAsAction="ifRoom|collapseActionView"
Après une semaine de perplexité à ce sujet. Je pense que j'ai compris.
J'utilise maintenant juste un EditText à l'intérieur de la barre d'outils. Cela m'a été suggéré par oj88 sur reddit.
J'ai maintenant ceci:
Tout d'abord dans onCreate () de mon activité, j'ai ajouté le EditText avec une vue d'image sur le côté droit de la barre d'outils comme ceci:
Cela a fonctionné, mais je suis ensuite tombé sur un problème où onOptionsItemSelected () n'était pas appelé lorsque j'ai tapé sur le bouton d'accueil. Je n'ai donc pas pu annuler la recherche en appuyant sur le bouton d'accueil. J'ai essayé plusieurs façons différentes d'enregistrer l'écouteur de clic sur le bouton d'accueil, mais elles n'ont pas fonctionné.
Finalement, j'ai découvert que le ActionBarDrawerToggle que j'avais interférait avec les choses, alors je l'ai supprimé. Cet auditeur a alors commencé à travailler:
Je peux donc maintenant annuler la recherche avec le bouton d'accueil, mais je ne peux pas encore appuyer sur le bouton retour pour l'annuler. J'ai donc ajouté ceci à onBackPressed ():
J'ai créé cette méthode pour basculer la visibilité de l'élément EditText et du menu:
J'avais besoin d'un moyen de basculer le bouton d'accueil de la barre d'outils entre l'icône du tiroir et le bouton de retour. J'ai finalement trouvé la méthode ci-dessous dans cette réponse SO . Bien que je l'ai légèrement modifié pour avoir plus de sens pour moi:
Cela fonctionne, j'ai réussi à résoudre quelques bugs que j'ai trouvés en cours de route. Je ne pense pas que ce soit à 100% mais cela fonctionne assez bien pour moi.
EDIT: Si vous souhaitez ajouter la vue de recherche en XML au lieu de Java, procédez comme suit:
toolbar.xml:
onCreate () de votre activité:
la source
Je sais que c'est un vieux fil, mais je poste toujours la bibliothèque que je viens de créer. J'espère que cela pourrait aider quelqu'un.
https://github.com/Shahroz16/material-searchview
la source
La première capture d'écran de votre question n'est pas un widget public. Le support SearchView (
android.support.v7.widget.SearchView
) imite SearchView ( ) d'Android 5.0 Lollipopandroid.widget.SearchView
. Votre deuxième capture d'écran est utilisée par d'autres applications conçues par des matériaux comme Google Play.Le SearchView de votre première capture d'écran est utilisé dans Drive, YouTube et d'autres applications Google Apps à code source fermé. Heureusement, il est également utilisé dans le numéroteur Android 5.0 . Vous pouvez essayer de rétroporter la vue, mais il utilise des API 5.0.
Les classes que vous voudrez regarder sont:
SearchEditTextLayout , AnimUtils et DialtactsActivity pour comprendre comment utiliser View. Vous aurez également besoin de ressources de ContactsCommon .
Bonne chance.
la source
Voici ma tentative de faire ceci:
Étape 1: créer un style nommé
SearchViewStyle
Étape 2: Créez une mise en page nommée
simple_search_view_item.xml
Étape 3: créer un élément de menu pour cette vue de recherche
Étape 4: gonflez le menu
Résultat:
La seule chose que je n'ai pas pu faire était de le faire remplir toute la largeur du
Toolbar
. Si quelqu'un pouvait m'aider à faire ça, ce serait en or.la source
I wasn't able to do was to make it fill the entire width
, quelle version de bibliothèque de support utilisez-vous? Essayez de configurerapp:contentInsetStartWithNavigation="0dp"
votre barre d'outils.Pour obtenir l'aspect souhaité de SearchView, vous pouvez utiliser des styles.
Tout d'abord, vous devez créer
style
pour votre SearchView, qui devrait ressembler à ceci:Liste complète des attributs que vous pouvez trouver dans cet article, dans la section "SearchView".
Deuxièmement, vous devez créer un
style
for yourToolbar
, qui est utilisé comme ActionBar:Et enfin, vous devez mettre à jour votre attribut de thème de barre d'outils de cette façon:
Résultat:
REMARQUE: vous devez modifier
Toolbar
directement l'attribut de votre thème. Si vous mettez simplement à jour l'searchViewStyle
attribut de votre thème principal, cela n'affectera pas votreToolbar
.la source
navigate-back
(flèche arrière) etcancel
(les x) vous-même ou elles ont été automatiquement ajoutées?navigate-back
est toujours affiché, n'apparaîtclear
qu'après avoir écrit une requête de recherche.Une autre façon d'obtenir l'effet souhaité consiste à utiliser cette bibliothèque de vues de recherche de matériaux . Il gère automatiquement l'historique de recherche et il est également possible de fournir des suggestions de recherche à la vue.
Exemple: (il est affiché en portugais, mais il fonctionne également en anglais et en italien).
Installer
Avant de pouvoir utiliser cette bibliothèque, vous devez implémenter une classe nommée
MsvAuthority
à l'intérieur dubr.com.mauker
package sur votre module d'application, et elle doit avoir une variable String statique publique appeléeCONTENT_AUTHORITY
. Donnez-lui la valeur que vous souhaitez et n'oubliez pas d'ajouter le même nom sur votre fichier manifeste. La bibliothèque utilisera ce fichier pour définir l'autorité du fournisseur de contenu.Exemple:
MsvAuthority.java
AndroidManifest.xml
Usage
Pour l'utiliser, ajoutez la dépendance:
Et puis, sur votre
Activity
fichier de mise en page, ajoutez ce qui suit:Après cela, il vous suffira d'obtenir la
MaterialSearchView
référence en utilisantgetViewById()
, et de l'ouvrir ou de la fermer en utilisantMaterialSearchView#openSearch()
etMaterialSearchView#closeSearch()
.PS: Il est possible d'ouvrir et de fermer la vue non seulement depuis le
Toolbar
. Vous pouvez utiliser laopenSearch()
méthode à partir de n'importe quelle méthodeButton
, comme un bouton d'action flottant.Vous pouvez également fermer la vue à l'aide du bouton Retour, en procédant comme suit:
Pour plus d'informations sur l'utilisation de la lib, consultez la page github .
la source
Ce qui suit va créer un SearchView identique à celui de Gmail et l'ajouter à la barre d'outils donnée. Vous n'aurez qu'à implémenter votre propre méthode "ViewUtil.convertDpToPixel".
la source