我有一个像这样的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"
,但图标保持在左侧。
任何帮助都会很棒:)
我找到了解决这个问题的方法。只需将布局方向设置为“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移动到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" />
最终结果如下:
我无法找到确切的答案所以我这样做了 - 用搜索图标创建一个图像视图。将它放在我的布局右侧。单击时,使搜索视图可见并设置图标化为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 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。
除了工具栏之外,我对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
}
以这种方式为我工作。我使用Toolbar而不是ActionBar。
searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.RIGHT));