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

 更新时间:2019年05月07日 11:31:57   作者:xing_star  
这篇文章主要介绍了解决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编程实现应用程序开机自启动的方法

    Android编程实现应用程序开机自启动的方法

    这篇文章主要介绍了Android编程实现应用程序开机自启动的方法,涉及Android权限控制及广播操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • Android布局耗时监测的三种实现方式

    Android布局耗时监测的三种实现方式

    在Android应用开发中,性能优化是一个至关重要的方面,为了更好地监测布局渲染的耗时,我们需要一种可靠的实现方案,本文将介绍三种针对Android布局耗时监测的实现方案,帮助开发者及时发现并解决布局性能问题,需要的朋友可以参考下
    2024-03-03
  • Assert.assertEquals()方法参数详解

    Assert.assertEquals()方法参数详解

    本文详细讲解了Assert.assertEquals()方法参数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Android ViewStub使用方法学习

    Android ViewStub使用方法学习

    这篇文章主要为大家介绍了Android ViewStub使用方法学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android APP使用自定义字体实现方法

    Android APP使用自定义字体实现方法

    这篇文章主要介绍了Android APP使用自定义字体实现方法的相关资料,需要的朋友可以参考下
    2016-10-10
  • android禁止锁屏保持常亮(示例代码)

    android禁止锁屏保持常亮(示例代码)

    android禁止锁屏保持常亮(示例代码)。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • Android 实现图片生成卷角和圆角缩略图的方法

    Android 实现图片生成卷角和圆角缩略图的方法

    本篇文章主要介绍了Android 实现图片生成卷角和圆角缩略图的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 掌握Android Handler消息机制核心代码

    掌握Android Handler消息机制核心代码

    该文主要是分析Handler消息机制的关键源码,文章会从对handler有一些基本的认识开始介绍,内容详细,感兴趣的小伙伴可以参考下
    2021-09-09
  • Android如何使用RecyclerView打造首页轮播图

    Android如何使用RecyclerView打造首页轮播图

    这篇文章主要为大家详细介绍了Android如何使用RecyclerView打造首页轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Flutter简洁实用的图片编辑器的实现

    Flutter简洁实用的图片编辑器的实现

    本文主要介绍了Flutter简洁实用的图片编辑器的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论