Android SearchView - 向右移动图标(没有 ActionBar)
Android SearchView - Move icon to right (without ActionBar)
我有一个像这样的 android SearchView -
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:queryHint="Search the forum ..."
android:iconifiedByDefault="true"
android:id="@+id/search_forum"
android:layout_alignParentRight="true"
android:textColor="#aaa" />
这不在我的 ActionBar 中,它在我的其他地方 activity。
我需要将图标(搜索图标)留在布局的右侧。单击它应该扩展到 SearchView(与 ActionBar SearchView 相同的行为)。我试过了 android:layout_alignParentRight="true"
但图标一直在左边。
任何帮助都会很棒 :)
我找不到确切的答案所以我这样做了-
创建带有搜索图标的图像视图。把它放在我的布局的右边。
单击时,使搜索视图可见并设置 iconified false 并请求搜索视图的焦点。
如果有人最终能帮我找到合适的解决方案,我将不胜感激。
将 SearchView 添加为菜单项而不是工具栏元素从根本上解决了问题。
一种优雅的方式:
步骤 1 - 将搜索字段添加到您的工具栏:
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
步骤 2 - 将逻辑添加到您的 onCreateOptionsMenu()
import android.support.v7.widget.SearchView; // not the default !
@Override
public boolean onCreateOptionsMenu( Menu menu) {
getMenuInflater().inflate( R.menu.main, menu);
MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
searchView = (SearchView) myActionMenuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
UserFeedback.show( "SearchOnQueryTextSubmit: " + query);
if( ! searchView.isIconified()) {
searchView.setIconified(true);
}
myActionMenuItem.collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String s) {
// UserFeedback.show( "SearchOnQueryTextChanged: " + s);
return false;
}
});
return true;
}
来源:
如果问题仍未得到解答:
只需将 SearchView 移动到 RelativeLayout 中,并将其与父级的右侧对齐:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.SearchView
android:layout_width="wrap_content"
android:id="@+id/searchView"
android:layout_alignParentRight="true"
android:layout_height="match_parent" />
最终结果如下所示:
CardView with Linearlayout containing aligned SearchView
我找到了解决这个问题的方法。只需将布局方向设置为 "rtl",图标将位于右侧。这是我的搜索视图的代码,它按预期工作。
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutDirection="rtl"
android:iconifiedByDefault="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
试试这个:
SearchView searchView =
(SearchView) findViewById(R.id.search_view);
searchView.setIconifiedByDefault(false);
searchView.setIconified(false);
ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
ViewGroup linearLayoutSearchView =
(ViewGroup) searchViewIcon.getParent();
linearLayoutSearchView.removeView(searchViewIcon);
linearLayoutSearchView.addView(searchViewIcon);
摘自 here.
这种方式对我有用。我使用工具栏而不是 ActionBar。
searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.RIGHT));
除了工具栏之外,我对 SearchView 的要求完全相同,即当折叠搜索图标时应位于右端,展开时应覆盖整个宽度。
我已经在 RelativeLayout 中为 SearchView 尝试了这个解决方案。
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true" />
并在代码中处理 OnSearchClickListener
和 OnCloseListener
以在 MATCH_PARENT
和 WRAP_CONTENT
之间切换宽度。
searchView.setOnSearchClickListener {
val params = it.layoutParams as RelativeLayout.LayoutParams
params.width = RelativeLayout.LayoutParams.MATCH_PARENT
it.layoutParams = params
}
searchView.setOnCloseListener {
val params = searchView.layoutParams as RelativeLayout.LayoutParams
params.width = RelativeLayout.LayoutParams.WRAP_CONTENT
searchView.layoutParams = params
return@setOnCloseListener false
}
我有一个像这样的 android SearchView -
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:queryHint="Search the forum ..."
android:iconifiedByDefault="true"
android:id="@+id/search_forum"
android:layout_alignParentRight="true"
android:textColor="#aaa" />
这不在我的 ActionBar 中,它在我的其他地方 activity。
我需要将图标(搜索图标)留在布局的右侧。单击它应该扩展到 SearchView(与 ActionBar SearchView 相同的行为)。我试过了 android:layout_alignParentRight="true"
但图标一直在左边。
任何帮助都会很棒 :)
我找不到确切的答案所以我这样做了- 创建带有搜索图标的图像视图。把它放在我的布局的右边。 单击时,使搜索视图可见并设置 iconified false 并请求搜索视图的焦点。
如果有人最终能帮我找到合适的解决方案,我将不胜感激。
将 SearchView 添加为菜单项而不是工具栏元素从根本上解决了问题。
一种优雅的方式:
步骤 1 - 将搜索字段添加到您的工具栏:
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
步骤 2 - 将逻辑添加到您的 onCreateOptionsMenu()
import android.support.v7.widget.SearchView; // not the default !
@Override
public boolean onCreateOptionsMenu( Menu menu) {
getMenuInflater().inflate( R.menu.main, menu);
MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
searchView = (SearchView) myActionMenuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
UserFeedback.show( "SearchOnQueryTextSubmit: " + query);
if( ! searchView.isIconified()) {
searchView.setIconified(true);
}
myActionMenuItem.collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String s) {
// UserFeedback.show( "SearchOnQueryTextChanged: " + s);
return false;
}
});
return true;
}
来源:
如果问题仍未得到解答:
只需将 SearchView 移动到 RelativeLayout 中,并将其与父级的右侧对齐:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.SearchView
android:layout_width="wrap_content"
android:id="@+id/searchView"
android:layout_alignParentRight="true"
android:layout_height="match_parent" />
最终结果如下所示:
CardView with Linearlayout containing aligned SearchView
我找到了解决这个问题的方法。只需将布局方向设置为 "rtl",图标将位于右侧。这是我的搜索视图的代码,它按预期工作。
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutDirection="rtl"
android:iconifiedByDefault="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
试试这个:
SearchView searchView =
(SearchView) findViewById(R.id.search_view);
searchView.setIconifiedByDefault(false);
searchView.setIconified(false);
ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
ViewGroup linearLayoutSearchView =
(ViewGroup) searchViewIcon.getParent();
linearLayoutSearchView.removeView(searchViewIcon);
linearLayoutSearchView.addView(searchViewIcon);
摘自 here.
这种方式对我有用。我使用工具栏而不是 ActionBar。
searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.RIGHT));
除了工具栏之外,我对 SearchView 的要求完全相同,即当折叠搜索图标时应位于右端,展开时应覆盖整个宽度。
我已经在 RelativeLayout 中为 SearchView 尝试了这个解决方案。
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true" />
并在代码中处理 OnSearchClickListener
和 OnCloseListener
以在 MATCH_PARENT
和 WRAP_CONTENT
之间切换宽度。
searchView.setOnSearchClickListener {
val params = it.layoutParams as RelativeLayout.LayoutParams
params.width = RelativeLayout.LayoutParams.MATCH_PARENT
it.layoutParams = params
}
searchView.setOnCloseListener {
val params = searchView.layoutParams as RelativeLayout.LayoutParams
params.width = RelativeLayout.LayoutParams.WRAP_CONTENT
searchView.layoutParams = params
return@setOnCloseListener false
}