我有一个像这样的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中,它在我活动的其他地方。
我需要图标(搜索图标)保留在我的布局右侧。点击它应该扩展到SearchView(与ActionBar SearchView相同的行为)。我已尝试android:layout_alignParentRight="true"
,但图标位于左侧。
任何帮助都会很棒:)
答案 0 :(得分:5)
我找到了解决这个问题的方法。只需将布局方向设置为&#34; rtl&#34;和图标将在右侧。这是我的搜索视图的代码,它按预期工作。
<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" />
答案 1 :(得分:2)
如果问题仍然没有答案:
将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" />
最终结果如下:
答案 2 :(得分:1)
我找不到一个确切的答案,所以我这样做 - 使用搜索图标创建图像视图。将它放在我的布局右侧。 单击时,使搜索视图可见并设置图标化为false并请求焦点为搜索视图。
如果有人能帮我找到合适的解决办法,我会非常感激。
答案 3 :(得分:0)
将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;
}
答案 4 :(得分:0)
尝试一下:
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。
答案 5 :(得分:0)
除工具栏外,我对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
}
答案 6 :(得分:-1)
尝试这种方式它将起作用
SearchView search = (SearchView) item.getActionView();
search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT));
答案 7 :(得分:-1)
以这种方式为我工作。我使用工具栏而不是ActionBar。
searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.RIGHT));