大佬教程收集整理的这篇文章主要介绍了Android SearchView需要两次点击才能展开视图,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
长:
我使用SearchView来过滤MainActivity中Fragment中的RecyclerView.
当我点击SearchViewIcon时(默认情况下,SearchView被图标化).我使用以下代码打开带有正确片段的选项卡:
searchView.setOnSearchClickListener(new View.onClickListener() { @Override public void onClick(View v) { viewPager.setCurrentItem(2,falsE); } });
具有正确片段的选项卡将按预期打开.此外,还显示了文本输入,但SearchView保持图标化. (见下图.)
我在XML中的SearchView:
<item android:id="@+id/action_search" android:orderInCategory="1" android:icon="@android:drawable/ic_menu_search" android@R_928_6964@="@String/menu_item_search_title" app:showAsAction="ifRoom" app:queryHint="Search name or function" app:actionViewClass="android.support.v7.widget.SearchView" />
我已经尝试过的事情:
将我的showAsAction设置为always或ifRoom | collapseActionView
app:showAsAction="always" app:showAsAction="ifRoom|collapseActionView"
请求关注我的SearchView:
searchView.requestFocus();
扩展我的SearchViewItem:
@H_93_13@menuItem searchViewItem = menu.findItem(R.id.action_search); searchViewItem.expandActionView();
但是没有这些东西有效……
编辑
就像标题所说,如果我再次单击SearchViewIcon,SearchView会扩展.
>默认情况下,searchView未展开
>搜索EditText直到第二次单击才获得焦点
>即使在解决(2)之后,键盘也没有显示,直到第二次点击
解决方案:
>在menu.xml中需要定义app:showAsAction为JavaF代码中的“collapseActionView”还需要调用searchView.setIconifiedByDefault(false)以使扩展优先于图标化(即 – 当图标被按下时,展开并穿上不要停留在图标模式下
>为搜索菜单项对象@L_450_18@menuItem.OnActionExpandListener,并使用处理程序发布将请求焦点到搜索视图对象的runnable.
(为什么可以运行?因为在菜单仍未完全膨胀时请求焦点不能保证工作.当在处理程序中运行请求焦点时,我确保焦点请求在onCreateOptionsMenu()中的所有工作都准备就绪后发生并完成.
>在(2)中定义的runnable中,也要求android OS显示键盘.
<item android:id="@+id/searchContacts" android:icon="@drawable/ic_search_white_24dp" android@R_928_6964@="search" app:showAsAction="collapseActionView|always" app:actionViewClass="android.widget.SearchView" /> <!-- and of course your other menu items -->
需要创建这样的xml文件.
右键单击您的res文件夹并选择new – > android资源文件.把你想要的任何东西作为文件名(例如,“searchable”可以正常工作),并选择XML作为资源类型.
然后复制&将此代码粘贴到创建的文件中(用您自己的替换提示字符串):
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://scheR_838_11845@as.android.com/apk/res/android" android:label="@String/app_name" android:hint="put here your hint String to be shown" />
@Override public Boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu,menu); implementSearch(menu); return true; } private void implementSearch(final Menu menu) { SearchManager searchManager = (SearchManager) getSystemservice(Context.SEARCH_serviCE); final MenuItem searchMenuItem = menu.findItem(R.id.searchContacts); final SearchView searchView = (SearchView) searchMenuItem.getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener(){ @Override public Boolean onMenuItemActionExpand(MenuItem item){ // the search view is Now open. add your logic if you want new Handler().post(new Runnable() { @Override public void run() { searchView.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemservice(Context.INPUT_METHOD_serviCE); if (imm != null) { // it's never null. I've added this line just to make the compiler happy imm.showSofTinput(searchView.findFocus(),0); } } }); return true; } @Override public Boolean onMenuItemActionCollapse(MenuItem item){ // the search view is closing. add your logic if you want return true; } }); }
此外,如果您想使用自己的回调进行搜索的文本更改和提交(而不是Android意图),在implementSearch()方法中@L_450_18@对searchMenuItem.setOnActionExpandListener的调用(new SearchView.onQueryTextListener({…})) .
查看this SO question了解更多详情
以上是大佬教程为你收集整理的Android SearchView需要两次点击才能展开视图全部内容,希望文章能够帮你解决Android SearchView需要两次点击才能展开视图所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。