web-dev-qa-db-fra.com

Comment déplacer l'icône de recherche de SearchView vers la droite?

 enter image description here

Voici ma mise en page, en utilisant Android.support.v7.widget.SearchView. Je souhaite déplacer l’icône de recherche sur le côté droit, mais je n’ai trouvé aucune méthode ... `

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/AppTheme.AppBarOverlay">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways|snap"
        app:popupTheme="@style/AppTheme.PopupOverlay">

        <Android.support.v7.widget.SearchView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </Android.support.v7.widget.Toolbar>

    <Android.support.design.widget.TabLayout
        Android:id="@+id/tab_main_title"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" />
</Android.support.design.widget.AppBarLayout>

`

après avoir cliqué sur l'icône, cette disposition sera modifiée  enter image description here

16
meunicorn

Vous pouvez le faire par programme

SearchView search = (SearchView) item.getActionView();
    search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT)); 
18
Aditya Vyas-Lakhan

Vous pouvez ajouter une action de recherche dans menu.xml comme ci-dessous:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools">
    <item
        Android:id="@+id/action_search"
        Android:icon="@mipmap/ic_search_white_24dp"
        app:actionViewClass="Android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom|collapseActionView" />
    <item Android:id="@+id/action_download"
        Android:title="@string/menu_action_download"
        Android:icon="@mipmap/ic_file_download_white_24dp"
        Android:orderInCategory="100"
        app:showAsAction="always" />
</menu>

 Normal look  Collapsed look

11
emotionfxxk
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.AppBarOverlay">

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="?attr/colorPrimary"
    app:layout_scrollFlags="scroll|enterAlways|snap"
    app:popupTheme="@style/AppTheme.PopupOverlay">

    <RelativeLayout
       Android:id="@+id/not"
       Android:layout_width="wrap_content"
       Android:layout_height="wrap_content"
                        >
    <Android.support.v7.widget.SearchView
        Android:layout_alignParentRight="true"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />
</RelativeLayout>
</Android.support.v7.widget.Toolbar>

<Android.support.design.widget.TabLayout
    Android:id="@+id/tab_main_title"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" />
</Android.support.design.widget.AppBarLayout>
9
Mohd Asif Ahmed

Régler la gravité SearchView à droite à travers xml ou par programmation fonctionne, mais lorsque la variable SearchView a été étendue, elle prenait une petite zone de la largeur à droite, ce qui n’était pas le style que j’avais en tête. largeur.

Remarque 1: Cette solution ne permettait pas l'affichage du titre, j'ai donc ajouté une TextView pour le conserver.

Remarque 2: lorsque la variable SearchView était étendue, elle chevauchait le titre personnalisé. J'ai donc créé l'arrière-plan SearchView comme barre d'outils pour éviter de masquer/afficher le titre avec les propriétés de développement/réduction de SearchView

Voici le code Toolbar:

  <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" >

        <RelativeLayout
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize">

            <TextView
                Android:id="@+id/toolbar_title"
                style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
                Android:layout_width="wrap_content"
                Android:layout_height="match_parent"
                Android:gravity="center_vertical"
                Android:text="Toolbar Title"
                Android:textColor="@Android:color/white" />

            <Android.support.v7.widget.SearchView
                Android:id="@+id/search_view"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_alignParentRight="true"
                Android:layout_centerVertical="true"
                Android:background="?attr/colorPrimary"
                Android:gravity="right" />
        </RelativeLayout>
    </Android.support.v7.widget.Toolbar>

À l’intérieur de l’activité, j’ai utilisé les écouteurs Close et SearchClick pour aligner la variable SearchView à gauche.

    mSearchView = findViewById(R.id.search_view);

    mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) mSearchView.getLayoutParams();
            param.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
            //set layout params to cause layout update
            mSearchView.setLayoutParams(param);
            return false;
        }
    });
    mSearchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) mSearchView.getLayoutParams();
            param.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
            //set layout params to cause layout update
            mSearchView.setLayoutParams(param);
        }
    });
1
user3814327

vous pouvez essayer le layoutdirection. réglez-le sur "rtl"

Android: layoutDirection = "rtl" dans votre searchview xml:

<Android.support.v7.widget.SearchView
                        Android:id="@+id/searchView"
                        Android:layout_width="wrap_content"
                        Android:layout_height="wrap_content"
                        Android:layout_alignParentRight="true"
                        Android:layout_marginRight="11.4dp"
                        app:iconifiedByDefault="true"
                        Android:animateLayoutChanges="true"
                        app:queryHint="@string/search_hint"
                        app:queryBackground="@Android:color/transparent"
                        app:searchHintIcon="@drawable/empty_drawable"
                        app:closeIcon="@drawable/close_x_icon"
                        **Android:layoutDirection="rtl"**
                        app:searchIcon="@drawable/magnifying_glass"
                        />

n'oubliez pas de mettre ceci dans votre tag d'application manifeste:

 Android:supportsRtl="true"
1
j2emanue

Essayez ceci ... Il ressemble à ce que vous attendez. Ajoutez simplement cette ligne dans la balise SearchView.

Android: gravity = "right"

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="?attr/colorPrimary"
    app:layout_scrollFlags="scroll|enterAlways|snap"
    app:popupTheme="@style/AppTheme.PopupOverlay">

    <Android.support.v7.widget.SearchView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:gravity="right" />
</Android.support.v7.widget.Toolbar>

<Android.support.design.widget.TabLayout
    Android:id="@+id/tab_main_title"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" />

1
Parama Sudha

Probablement trop tard pour la réponse, mais cela a fonctionné pour moi, comme vous pouvez le voir sur le screenshot ci-joint.

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:minHeight="?attr/actionBarSize"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:layout_constraintBottom_toTopOf="@+id/relativeLayout"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:title="Contacts">

    <Android.support.v7.widget.SearchView
        Android:id="@+id/searchView"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="end"
        Android:gravity="center_vertical"
        app:queryHint="Search" />

</Android.support.v7.widget.Toolbar>
0
Siddhant

Si vous souhaitez utiliser SearchView en dehors de ActionBar dans une autre vue (disons par exemple ConstraintLayout), vous pouvez utiliser l'approche publiée sur this site. En gros, l’icône est dans une ImageView positionnée au début de la présentation (ou je pourrais dire "c’est le premier élément ajouté à son parent"). Avec ce code, vous le recherchez, puis le supprimez du parent et le remettez enfin en place. Le résultat: il sera positionné à la "fin" du widget SearchView ... problème résolu ...

//Get ImageView of icon
ImageView searchViewIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);

//Get parent of gathered icon
ViewGroup linearLayoutSearchView = (ViewGroup) searchViewIcon.getParent();
//Remove it from the left...
linearLayoutSearchView.removeView(searchViewIcon);
//then put it back (to the right by default)
linearLayoutSearchView.addView(searchViewIcon);

Testé, fonctionnel, satisfait ...;)

0
Geryson