解决Android SearchView不显示搜索icon的问题
2019/7/7 22:16:28
本文主要是介绍解决Android SearchView不显示搜索icon的问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景:
之前碰到了一个页面展示问题,SearchView放在Toolbar里面,展示在页面顶部,发现进入这个页面后,左上角是箭头图标(表示点击返回),中间区域就是搜索栏,不过看到会显示搜索icon🔍感觉额外丑陋,就想要把它隐藏掉,找了一圈没有找到如何隐藏Android中android.support.v7.widget.SearchView
的icon,只好自己慢慢研究,手动调试观察效果了。
解决办法:
经过一段时间的调试,得出了结论,先给出方案。
final ImageView searchIcon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); mSearchView.post(new Runnable() { @Override public void run() { searchIcon.setImageDrawable(null); searchIcon.setVisibility(View.GONE); } });
接着从android.support.v7.widget.SearchView的源码中,找找原因。
private void updateViewsVisibility(final boolean collapsed) { mIconified = collapsed; // Visibility of views that are visible when collapsed final int visCollapsed = collapsed ? VISIBLE : GONE; // Is there text in the query final boolean hasText = !TextUtils.isEmpty(mSearchSrcTextView.getText()); mSearchButton.setVisibility(visCollapsed); updateSubmitButton(hasText); mSearchEditFrame.setVisibility(collapsed ? GONE : VISIBLE); final int iconVisibility; if (mCollapsedIcon.getDrawable() == null || mIconifiedByDefault) { iconVisibility = GONE; } else { iconVisibility = VISIBLE; } mCollapsedIcon.setVisibility(iconVisibility); updateCloseButton(); updateVoiceButton(!hasText); updateSubmitArea(); }
updateViewsVisibility()
方法很关键,会被执行多次,这个方法就决定了mCollapsedIcon是否显示隐藏,通过分析,得出需要将mCollapsedIcon对应的Drawable设置为null,mCollapsedIcon.setVisibility(iconVisibility)
才会隐藏搜索图标。代码比较简单,主要是要有意识的去翻看源码,看看内部实现。
mCollapsedIcon = findViewById(R.id.search_mag_icon);
还可以找到SearchView对应的xml布局文件,路径是appcompat-v7/res/layout/abc_search_view.xml
到此问题完美解决。
遗留一个小问题,如果要更换SearchView的closebtn(类似ClearEditText的清空内容的图标)对应的图片资源呢?咱们留到下一篇讲解。
总结
以上所述是小编给大家介绍的解决Android SearchView不显示搜索icon的问题 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对找一找教程网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
这篇关于解决Android SearchView不显示搜索icon的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-18android.permission.read_media_video
- 2024-01-18android_getaddrinfo failed eai_nodata
- 2024-01-18androidmo
- 2024-01-15Android下三种离屏渲染技术
- 2024-01-09Android 蓝牙使用
- 2024-01-06Android对接华为AI - 文本识别
- 2023-11-15代码安全之代码混淆及加固(Android)
- 2023-11-10简述Android语音播报TTS
- 2023-11-06Android WiFi工具类
- 2023-07-22Android开发未来的出路