美文网首页
SearchView.setOnCloseListener失效的

SearchView.setOnCloseListener失效的

作者: 假装很正经_e60e | 来源:发表于2018-10-09 17:21 被阅读0次

当设置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();
                    }
                });
            }
        }

相关文章

网友评论

      本文标题:SearchView.setOnCloseListener失效的

      本文链接:https://www.haomeiwen.com/subject/aqryaftx.html