Android.support.v7.widget.SearchView
を使用したレイアウトは次のとおりです。検索アイコンを右側に移動したいのですが、方法が見つかりません... `
<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>
`
プログラムで実行できます
SearchView search = (SearchView) item.getActionView();
search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT));
以下のようにmenu.xmlに検索アクションを追加できます。
<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>
レイアウト方向を試すことができます。 「rtl」に設定します
Searchview xmlのAndroid:layoutDirection = "rtl":
<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"
/>
これをマニフェストアプリケーションタグに入れることを忘れないでください。
Android:supportsRtl="true"
SearchView
重力をxmlを介して右側に設定するか、プログラムで機能しますが、SearchView
を展開すると、意図した外観ではない右側の幅の小さな領域が使用されました。 、私はそれが全幅を取るようにしたかった。
注1:このソリューションではタイトルを表示できなかったため、タイトルを保持するためにTextView
を追加しました。
注2:SearchView
が展開されると、カスタムタイトルと重なるため、SearchView
の展開/でタイトルを非表示/表示し続けることを避けるため、ツールバーとしてSearchView
背景を作成しました。崩壊
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>
アクティビティ内で、CloseリスナーとSearchClickリスナーを使用して、SearchView
を左に揃えました。
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);
}
});
これを試してみてください...予想どおりに見えます。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" />
おそらく答えには遅すぎましたが、添付の screenshot からわかるように、これでうまくいきました。
<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>
他のビューでSearchView
の外でActionBar
を使用したい場合(たとえばConstraintLayout
など)、 this に投稿されたアプローチを使用できます。 =サイト。基本的に、アイコンはレイアウトの先頭に配置されたImageView
にあります(またはと言うことができます」「最初の要素が親に追加された」)。このコードでは、それを検索してから親から削除し、最後に元に戻します。結果:SearchView
ウィジェットの「終わり」に配置されます...問題が解決しました...
//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);
テスト済み、動作中、満足...;)