解决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的问题 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Android搜索框SearchView属性和用法详解

    SearchView简介 SearchView是Android原生的搜索框控件,它提供了一个用户界面,用于用户搜索查询. SearchView默认是展示一个search的icon,点击icon展开搜索框,如果你想让搜索框默认就展开,可以通过setIconifiedByDefault(false);实现. SearchView属性 SearchView使用 xml中定义SearchView: <?xml version="1.0" encoding="utf-8"

  • Android搜索框(SearchView)的功能和用法详解

    SearchView是搜索框组件,它可以让用户在文本框里输入文字,通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索. 1.SearchView组件的常用方法如下: ①setIconifiedByDefault(boolean iconified) ===> 设置搜索框默认是否自动缩小为图标. ②setOnQueryTextListener(SearchView,OnQueryTextListener listener) ===> 为搜索框设置监听器 ③setSubmitButt

  • Android仿简书动态searchview搜索栏效果

    简书的动态搜索栏效果是这样的,挺高大上的感觉. ezgif.com-resize.gif 仔细想一下,其实实现起来非常简单,这是我做的效果,基本完美还原. ezgif.com-resize (2).gif 实现这个效果, 只要关注几个点 1.搜索栏伸展和收缩动画效果实现 2.搜索栏伸展和收缩的时机 3.顶部透明度的渐变 搜索栏伸展和收缩动画效果实现: 我们只要明确,使用系统为我们提供的Transition框架,就可以轻而易举的实现了. 首先要引入依赖compile 'com.android.su

  • Android自定义View实现搜索框(SearchView)功能

    概述 在Android开发中,当系统数据项比较多时,常常会在app添加搜索功能,方便用户能快速获得需要的数据.搜索栏对于我们并不陌生,在许多app都能见到它,比如豌豆荚 在某些情况下,我们希望我们的自动补全信息可以不只是纯文本,还可以像豌豆荚这样,能显示相应的图片和其他数据信息,因此Android给我们提供的AutoCompleteTextView往往就不够用,在大多情况下我们都需要自己去实现搜索框. 分析 根据上面这张图,简单分析一下自定义搜索框的结构与功能,有 1. 搜索界面大致由三部门组成

  • Android SearchView搜索框组件的使用方法

    SearchView是搜索框组件,它可以让用户在文本框里输入文字,通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索. 本文就为大家分享了SearchView搜索框组件的使用方法,供大家参考,具体内容如下 效果: 代码SearchActivity.java package com.jialianjia.bzw.activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.

  • Android搜索框组件SearchView的基本使用方法

    SearchView是android系统中内置的一个搜索框组件,可以很方便在添加在用户界面之上,但是也带来了一些问题,那就是searchview的UI是固定的,定制起来会很麻烦,如果对SearchView的要求比较高,完全可以采用button和EditText自己实现.这里先简单的说说SearchView的使用: main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" x

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

    背景: 之前碰到了一个页面展示问题,SearchView放在Toolbar里面,展示在页面顶部,发现进入这个页面后,左上角是箭头图标(表示点击返回),中间区域就是搜索栏,不过看到会显示搜索icon

  • 如何解决android Toast重复显示

    Toast是一种简易的消息提示框,它无法获取焦点,按设置的时间来显示完以后会自动消失,一般用于帮助或提示. 先给大家分享下我的解决思路: 不用计算Toast的时间之类的,就是定义一个全局的成员变量Toast, 这个Toast不为null的时候才去make,否则直接setText.为了按返回键后立即使Toast不再显示,重写父类Activity的onBackPressed()方法里面去cancel你的Toast即可. 代码: private Toast mToast; public void sh

  • Android SearchView搜索控件使用方法详解

    本文实例为大家分享了Android SearchView搜索控件的具体实现代码,供大家参考,具体内容如下 方法介绍 setQueryHint 设置 Hint 的文字内容 setMaxWidth 设置搜索框的最大宽度 setSubmitButtonEnabled 是否显示提交按钮,默认是false setIconified 搜索框是否展开,false表示展开 setIconifiedByDefault 是否锁定搜索框为展开状态,false表示锁定(放大镜在搜索框外) onActionViewExp

  • Android 文件夹显示红色叹号的解决方法(必看)

    有感叹号,说明有的文件损坏或丢失了 解决方法: 右击工程,Build Path..->Configure Build Path...->Java Build Path 可以看到引用的jar包,看看是不是带x了 不用的话就移除,要用的引用回正确路径就可以了 以上这篇Android 文件夹显示红色叹号的解决方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Android 解决ScrollView嵌套CridView显示问题

    Android 解决ScrollView嵌套CridView显示问题 由于GridView是可滑动的控件,嵌套在ScrollView下时需要重写onMeasure方法. public class MyGridView extends GridView{ public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { supe

  • 解决android关于打开虚拟机时右侧工具栏不显示的问题

    一开始我就纳闷了,怎么调试都只是一个光溜溜的界面,右侧的工具栏都没有 如图: 就一个光秃秃的界面,什么都没有,这就对调试很不方便 于是我就试了试各种方法,然而并没有什么卵用. 后来一次无意之后发现我好像皮肤没选中即: 这就是问题的关键所在,当你没有选择的皮肤为no skin时,它的工具栏就不会出来 所以解决办法是: 将皮肤随便选一个就行了,但就是不能选no skin 以上这篇解决android关于打开虚拟机时右侧工具栏不显示的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多

  • 快速解决android webview https图片不显示的问题

    Android webview 从Lollipop(5.0)开始webview默认不允许混合模式,https当中不能加载http资源,需要设置开启. 解决方法: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } 以上这篇快速解决android webview

  • 解决Android studio中关于模拟器的/data目录不能显示的问题

    当我们在Android studio中打开Android device  monitor时,发现data目录不能打开,如图: 当我们去点击/data/目录时,发现什么都没有,这是怎么回事呢? 原因是我们权限不够,当前的用户没有权限访问data目录. 1.改变/data目录的权限 (1).在Android studio的sdk目录中找到platform-tools目录,在这个目录下同时按住shift和鼠标右键,然后选择命令窗口打开 (2).输入adb shell命令,然后输入su,使得用户切换到r

  • 解决android 显示内容被底部导航栏遮挡的问题

    描述: 由于产品需求,要求含有EditText的界面全屏显示,最好的解决方式是使用AndroidBug5497Workaround.assistActivity(this) 的方式来解决,但是华为和魅族手机系统自带的有底部导航栏,会造成一些布局被遮挡. 解决方案:在values-21的style.xml中添加android:windowDrawsSystemBarBackgrounds"并将值设置为false,方式如下 在style引用的主题里面加入android:windowDrawsSyst

随机推荐