Android SearchView不显示搜索icon

Android AUmaWSsSoi 3周前 (05-03) 48次浏览 0个评论
文章目录[隐藏]

背景:

之前碰到了一个页面展示问题,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的清空内容的图标)对应的图片资源呢?咱们留到下一篇讲解。


java问与答 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:http://javaexception.com/archives/80
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址