SearchView.setOnCloseListener失效的终极解决办法

当设置android.support.v7.widget.SearchView的属性为app:iconifiedByDefault="false"是SearchView是不可以关闭的,即setOnCloseListener方法触发不了,但是我又要实现当它点击清空按钮时清除输入框中的内容,并且清除搜索结果显示默认的数据。这时候就向调用setOnCloseListener方法,但是方法不能生效。

        mSearchView = view.findViewById(R.id.searchview);
        mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                return false;
            }
        });

于是想起来SearchView去除搜索框中取出下划线的方法,发现是找到里面的空间然后重新设置属性,于是想既然可以找到下划线空间,那肯定也可以找到关闭SearchView的图片按钮看了一下SearchView的源码

        mSearchSrcTextView = findViewById(R.id.search_src_text);
        mSearchSrcTextView.setSearchView(this);

        mSearchEditFrame = findViewById(R.id.search_edit_frame);
        mSearchPlate = findViewById(R.id.search_plate);
        mSubmitArea = findViewById(R.id.submit_area);
        mSearchButton = findViewById(R.id.search_button);
        mGoButton = findViewById(R.id.search_go_btn);
        mCloseButton = findViewById(R.id.search_close_btn);
        mVoiceButton = findViewById(R.id.search_voice_btn);
        mCollapsedIcon = findViewById(R.id.search_mag_icon);

mCloseButton 就是目标,于是这样写

        if (mSearchView == null) {
            return;
        } else {
            //获取TextView
            final TextView textView = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
            //设置字体大小为14sp
            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
            //设置提示文字颜色
            textView.setHintTextColor(Color.parseColor("#c2c2c2"));
            //去掉SearchView的下划线
            View viewById = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
            if (viewById != null) {
                viewById.setBackgroundColor(Color.TRANSPARENT);
            }
            //监听关闭按钮点击事件
            ImageView mCloseButton = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
            if (mCloseButton.isClickable()) {
                mCloseButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //清除搜索框并加载默认数据
                        mSearchView.clearFocus();
                        textView.setText(null);
                        Searched = false;
                        searchCoin = null;
                        onRefresh();
                    }
                });
            }
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 大多APP都具有搜索功能,但是大部分都是在标题栏中放置搜索的图标或者是不可输入的EditText,当点击的时...
    chaychan阅读 20,150评论 11 72
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,599评论 0 11
  • iphone7之后的机型因为硬件增加了新的振动马达,可以调节振动的尺度大小例如超级短的振动之类
    lightandall阅读 3,527评论 0 3
  • 孩子们最需要知道的是,他们对父母很重要,永远都被爱围绕。只有父母在生命的最初给予用心的陪伴,才会将满满的爱浸润到孩...
    y诗淇阅读 92评论 0 0
  • 非是苦昼短,只恨雨夜长。 终于下定决心来写《酒进将》的姊妹篇了(感兴趣的小可爱们可以去搜索之前的文章),老实说害怕...
    受过伤的振羽阅读 342评论 0 0