背景:
之前碰到了一个页面展示问题,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的问题 ,希望对大家有所帮助
如对本文有疑问, 点击进行留言回复!!
LongClick原理、上下文菜单原理、EditText长按弹窗原理、WebView长按弹窗自定义、修复WebView全选重复bug ———————————————— 版权声明:本文为CSDN博主「
JobScheduler 实现 特定时间,特定条件(系统空闲,电池电量,磁盘空间 ……)下执行任务
网友评论