use*_*568 76 android android-softkeyboard android-actionbar
我目前正在使用ActionBar菜单项在操作栏中显示SearchView.当搜索菜单项被展开时,显示软键盘,这就是我想要的.现在,当用户按下后退按钮关闭软键盘时,我还想在操作栏中折叠SearchView.
我尝试在MenuItem和ActionView上实现以下侦听器OnKeyListener和OnFocusChangeListener.我也尝试在Activity中使用OnBackPressed().以上都没有检测到后退按钮用于关闭软键盘的时间.
有任何想法吗?
我已经实现了OnActionExpandListener来了解SearchView何时可见.
Jon*_*lis 99
我将扩展@ user1258568的懒惰答案.这对我有用.请注意,它会在焦点丢失时清除查询.
final MenuItem searchMenuItem = optionsMenu.findItem(R.id.search);
final SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean queryTextFocused) {
if(!queryTextFocused) {
searchMenuItem.collapseActionView();
searchView.setQuery("", false);
}
}
});
Run Code Online (Sandbox Code Playgroud)
use*_*568 37
我找到了更好的解决方案.
searchView.setOnQueryTextFocusChangeListener().
Run Code Online (Sandbox Code Playgroud)
该OnQueryTextFocusChangeListener显示或隐藏键盘的时候被调用.在显示键盘并且搜索视图具有焦点时首先调用.keyboard隐藏时再次调用,搜索视图将失去焦点,close search view然后可以使用
menuItem.collapseActionView().
Run Code Online (Sandbox Code Playgroud)
Cod*_*sed 10
刚刚覆盖onBackPressed:
@Override
public void onBackPressed() {
if (searchView.isShown()){
searchView.onActionViewCollapsed(); //collapse your ActionView
searchView.setQuery("",false); //clears your query without submit
isClosed = true; //needed to handle closed by back
} else{
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
你的onCreateOptionsMenu会像这样膨胀mSearchView:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_search, menu);
mSearchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView();
mSearchView.setOnQueryTextListener(this);
mSearchView.setOnSearchClickListener(this);
mSearchView.setOnCloseListener(this);
isClosed = true;
return true;
}
Run Code Online (Sandbox Code Playgroud)
你有没有像下面这样实现以下内容:
public class myActivity extends FragmentActivity implements
SearchView.OnQueryTextListener, View.OnClickListener, SearchView.OnCloseListener {
Run Code Online (Sandbox Code Playgroud)
您还需要:
@Override
public void onClick(View view) {
isClosed = false;
}
@Override
public boolean onClose() {
isClosed = true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
您需要将"mSearchView"和"isClosed"作为活动的全局变量.
| 归档时间: |
|
| 查看次数: |
37618 次 |
| 最近记录: |