如何将 SearchView 的搜索图标移到右侧?
How to move SearchView 's search Icon to the right side?
这是我的布局,使用 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>
`
点击图标后,会变成这样的布局
<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>
试试这个...您 expect.Just 将此行添加到 SearchView 标记中。
android:重力="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" />
您可以通过编程方式完成
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>
如果您想在任何其他视图中使用 ActionBar
之外的 SearchView
(例如 ConstraintLayout
),您可以使用 this 上发布的方法地点。基本上,图标位于布局开始处的 ImageView
中(或者我可以说 "it is the first element added to its parent")。使用此代码,您正在搜索它,然后将其从父级中删除,最后将其放回原处。结果:它将定位在 SearchView
小部件的 "end" 处...问题已解决...
//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);
测试过,工作正常,满意...;)
通过 xml 或以编程方式将 SearchView
重力设置到右侧,但当 SearchView
展开时,它占用了右侧宽度的一小块区域'我想要的预期外观,我希望它采用全宽。
注意 1:此解决方案不允许显示标题,因此我添加了一个 TextView
来保存标题。
注意 2:当 SearchView
展开时,它会重叠在自定义标题上,所以我将 SearchView
背景作为工具栏以避免保留 hiding/showing 标题SearchView
的expand/collapse
这里是 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>
在 activity 中,我使用 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);
}
});
答案可能为时已晚,但这对我有用,正如您从所附的 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>
你可以试试layoutdirection。将其设置为 "rtl"
android:layoutDirection="rtl" 在你的搜索视图中 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"
/>
不要忘记将其放入清单应用程序标签中:
android:supportsRtl="true"
android:layoutDirection="rtl"
这对我有用。
这是我的布局,使用 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>
`
点击图标后,会变成这样的布局
<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>
试试这个...您 expect.Just 将此行添加到 SearchView 标记中。
android:重力="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" />
您可以通过编程方式完成
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>
如果您想在任何其他视图中使用 ActionBar
之外的 SearchView
(例如 ConstraintLayout
),您可以使用 this 上发布的方法地点。基本上,图标位于布局开始处的 ImageView
中(或者我可以说 "it is the first element added to its parent")。使用此代码,您正在搜索它,然后将其从父级中删除,最后将其放回原处。结果:它将定位在 SearchView
小部件的 "end" 处...问题已解决...
//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);
测试过,工作正常,满意...;)
通过 xml 或以编程方式将 SearchView
重力设置到右侧,但当 SearchView
展开时,它占用了右侧宽度的一小块区域'我想要的预期外观,我希望它采用全宽。
注意 1:此解决方案不允许显示标题,因此我添加了一个 TextView
来保存标题。
注意 2:当 SearchView
展开时,它会重叠在自定义标题上,所以我将 SearchView
背景作为工具栏以避免保留 hiding/showing 标题SearchView
的expand/collapse
这里是 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>
在 activity 中,我使用 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);
}
});
答案可能为时已晚,但这对我有用,正如您从所附的 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>
你可以试试layoutdirection。将其设置为 "rtl"
android:layoutDirection="rtl" 在你的搜索视图中 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"
/>
不要忘记将其放入清单应用程序标签中:
android:supportsRtl="true"
android:layoutDirection="rtl"
这对我有用。