现在很多应用都有搜索功能,使用系统自带的搜索控件可以很好的满足,但是在界面布局上要做一些定制化时,就需要做出合理的设置,比如实现下面的搜索界面:
点击第一个界面的搜索按钮后,弹出新的搜索界面,且希望弹出的搜索界面的搜索框是展开的,并不出现软键盘,这样可以完整呈现整个搜索界面。
废话不多说,直接上代码
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. super.onCreateOptionsMenu(menu); final SearchView searchView = getSearchView(); searchView.setSuggestionsAdapter(null); //不显示提示字符串 searchView.setSubmitButtonEnabled(false); //不显示搜索按钮 searchView.setOnCloseListener(new SearchView.OnCloseListener() { @Override public boolean onClose() { mSearchView.setQuery("",false); return true; } }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { SearchPage.this.finish(); return false; } @Override public boolean onQueryTextChange(String s) { return false; } }); searchView.setFocusable(false); //初始化时关闭软键盘(需配合onCreateOptionsMenu中的clearFocus()函数使用才能生效) return true; } //重写searchView的createSearchMenu(Menu menu)方法 @Override protected void onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_item_view, menu); mSearchItem = menu.findItem(R.id.action_mysearch); // Associate searchable configuration with the SearchView if (isFroyoOrNewer()) { mSearchView = (SearchView) MenuItemCompat.getActionView(mSearchItem); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); mSearchView.setIconified(false); //设置搜索框只有扩展状态 mSearchView.clearFocus(); //初始化时关闭软键盘 } }
比较不好实现的是初始化的时候如何不显示软键盘,小星查了良久也没有找到好的方法,最后歪打正着试出来了,如代码注释所示。
搜索按钮的xml文件如下: