当前位置: 移动技术网 > 移动技术>移动开发>Android > 解决Android SearchView不显示搜索icon的问题

解决Android SearchView不显示搜索icon的问题

2019年07月23日  | 移动技术网移动技术  | 我要评论

背景:

之前碰到了一个页面展示问题,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的问题 ,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网