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
Sie können es programmgesteuert machen
SearchView search = (SearchView) item.getActionView();
search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT));
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>
<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>
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);
}
});
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"
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" />
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>
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 ...;)