wake-up-neo.com

So verschieben Sie das Suchsymbol von SearchView auf die rechte Seite?

 enter image description here

Hier ist mein Layout mit Android.support.v7.widget.SearchView. Ich möchte das Suchsymbol auf die rechte Seite verschieben, aber ich habe keine Methode gefunden ... `

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

`

nachdem ich auf das Symbol geklickt habe, wird es zu diesem Layout geändert  enter image description here

16
meunicorn

Sie können es programmgesteuert machen

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

Sie können Suchaktionen in menu.xml wie folgt hinzufügen:

<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

Das Einstellen der SearchView-Schwerkraft nach rechts durch XML oder programmgesteuert funktioniert, aber wenn die SearchView erweitert wurde, nahm sie einen kleinen Bereich der Breite auf der rechten Seite ein, der nicht das beabsichtigte Aussehen war, das ich mir vorstellte Breite.

Hinweis 1: Bei dieser Lösung konnte der Titel nicht angezeigt werden. Daher wurde eine TextView für den Titel hinzugefügt.

Hinweis 2: Wenn die Variable SearchView erweitert wurde, überlappte sie den benutzerdefinierten Titel, sodass der Hintergrund SearchView als Symbolleiste verwendet wurde, um zu verhindern, dass der Titel mit der Option SearchView ein-/ausgeblendet wird

Hier ist der Toolbar Code:

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

Innerhalb der Aktivität habe ich die Listener Close und SearchClick verwendet, um die Variable SearchView nach links auszurichten.

    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

du könntest die layoutdirection ausprobieren. setze es auf "rtl"

Android: layoutDirection = "rtl" in Ihrer XML-Suchansicht:

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

vergessen Sie nicht, dies in Ihr Manifest-Anwendungs-Tag einzufügen:

 Android:supportsRtl="true"
1
j2emanue

Versuchen Sie das ... Es sieht so aus, wie Sie es erwarten. Fügen Sie diese Zeile einfach in das SearchView-Tag ein.

Android: Schwerkraft = "richtig"

<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

Wahrscheinlich zu spät für die Antwort, aber das hat für mich funktioniert, wie man dem screenshot anhängen kann.

<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

Wenn Sie SearchView außerhalb von ActionBar in einer anderen Ansicht verwenden möchten (beispielsweise ConstraintLayout), können Sie den auf this site veröffentlichten Ansatz verwenden. Grundsätzlich befindet sich das Symbol in einer ImageView, die am Anfang des Layouts positioniert ist (oder ich könnte sagen, "es ist das erste Element, das dem übergeordneten Element hinzugefügt wird"). Mit diesem Code suchen Sie nach dem Code, entfernen ihn aus dem übergeordneten Element und legen ihn schließlich zurück. Das Ergebnis: Es wird am "Ende" des SearchView-Widgets positioniert ... Problem gelöst ...

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

Getestet, funktioniert, zufrieden ...;)

0
Geryson