Android如何聚焦ActionBar searchView
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10089993/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android how to focus ActionBar searchView
提问by max4ever
Hello i need to put some text inside the searchView and focus/expand the searchView widget.
您好,我需要在 searchView 中放置一些文本并聚焦/扩展 searchView 小部件。
this is what i tried but it doesn't work
这是我尝试过的,但不起作用
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
...
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setQuery(this.filtro, false);
searchView.setFocusable(true);
searchView.requestFocus();
searchView.requestFocusFromTouch();
回答by farmer.chs
Try using searchView.setIconified(false)
. This worked for me:
尝试使用searchView.setIconified(false)
. 这对我有用:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = getActionBar();
SearchView searchView = new SearchView(this);
actionBar.setCustomView(searchView);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
searchView.setQuery("test",true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
}
回答by Owen Zhao
Here is another solution.
这是另一种解决方案。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem menu_search = menu.findItem(R.id.menu_search);
menu_search.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
//get focus
item.getActionView().requestFocus();
//get input method
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
return true; // Return true to expand action view
}
});
return true;
}
回答by Erick Martinez
This works for me:
这对我有用:
@Override
public boolean onMenuItemActionExpand(MenuItem item)
{
if (sm.isMenuShowing()) {
sm.toggle();
}
searchView.setIconified(true);
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, 32);
searchView.onKeyDown(32, event);
return true;
}
回答by CoolMind
For me the following works:
对我来说,以下工作:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
...
MenuItem miSearch = menu.findItem(R.id.menu_search);
SearchView mSearchView = (SearchView) miSearch.getActionView();
mSearchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSearchView.setFocusable(true);
mSearchView.requestFocusFromTouch();
}
});
I use android.support.v7.widget.SearchView. When tried to set mSearchView.setIconified(false);
it entered into an infinite loop.
我使用 android.support.v7.widget.SearchView。当试图设置mSearchView.setIconified(false);
它进入无限循环。
回答by u9217414
public void setIconified(boolean iconify) {
if (iconify) {
onCloseClicked();
} else {
onSearchClicked();
}
}
this is code in SearchView
这是 SearchView 中的代码
setIconified()is worked for me
setIconified()对我有用
回答by RadioactiveRadium
In the activity xml you can use this line:
在活动 xml 中,您可以使用这一行:
android:iconifiedByDefault="false"
回答by Brownsoo Han
In case SearchView is made by menu configuration, I expand the action view using menu item.
如果 SearchView 是通过菜单配置创建的,我会使用菜单项扩展操作视图。
private var searchMenuItem: MenuItem? = null
// create search menu item
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.search_menu, menu)
searchMenuItem = menu?.findItem(R.id.action_search)
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
(searchMenuItem?.actionView as? SearchView)?.apply {
setSearchableInfo(searchManager.getSearchableInfo(componentName))
}
return super.onCreateOptionsMenu(menu)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_search)
setSupportActionBar(findViewById(R.id.toolbar))
// Execute 'expandActionView' delayed
// because I want to focus field only when first start.
Handler().postDelayed({
// show field and focus it.
searchMenuItem?.expandActionView()
}, 500)
}
回答by Hai Hack
I implemented it in onCreateOptionMenu and it worked. You don't need to using setIconified(false);
我在 onCreateOptionMenu 中实现了它并且它起作用了。你不需要使用setIconified(false);
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setOnClickListener(view -> menu.findItem(R.id.action_sleep_timer).setVisible(false));
searchView.setOnCloseListener(() -> {
menu.findItem(R.id.action_sleep_timer).setVisible(true);
return false;
});
searchView.setOnSearchClickListener(view -> {
menu.findItem(R.id.action_sleep_timer).setVisible(false);
searchView.requestFocus();
});
return true;
}
回答by Saqib R.
searchView.setQuery("typeAnything",true);
searchView.setFocusable(true);
will do the trick.
会做的伎俩。