[Android搜索小部件]默认情况下如何隐藏搜索视图中的关闭按钮?

 杨 发布于 2022-12-20 16:15

我已经实现了机器人SearchViewActionBar.当SearchView获得焦点,关闭按钮[X]在合适的显示出来.我看了一下其他Android原生应用,比如联系人和Gmail.SearchView增益聚焦时不显示关闭按钮.

如何设置我的SearchView表现?

4 个回答
  • 您也可以使用它来隐藏关闭按钮

    ImageView closeBtn = (ImageView) searchView.findViewById(R.id.search_close_btn);
    closeBtn.setEnabled(false);
    closeBtn.setImageDrawable(null);
    

    2022-12-20 16:17 回答
  • 我遇到了同样的问题android.support.v7.widget.SearchView并找到了解决方案.首先,onCreateOptionsMenu您可以获取对SearchView及其关闭按钮的引用:

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.search, menu);
    
        MenuItem searchItem = menu.findItem(R.id.action_search);
        mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    
        try {
            Field searchField = SearchView.class.getDeclaredField("mCloseButton");
            searchField.setAccessible(true);
            mSearchCloseButton = (ImageView) searchField.get(mSearchView);
        } catch (Exception e) {
            Log.e(TAG, "Error finding close button", e);
        }
    }
    

    现在您可以尝试修改按钮.首先,我尝试使用setVisibility(View.GONE)隐藏关闭按钮,但这不起作用,因为当用户与SearchView交互时,SearchView会重置其关闭按钮的可见性.所以我的解决方案是使用透明drawable并禁用单击关闭按钮:

    if (mSearchCloseButton != null) {
        mSearchCloseButton.setEnabled(false);
        mSearchCloseButton.setImageDrawable(getResources().getDrawable(R.drawable.transparent));
    }
    

    这篇文章也帮助了我:http:
    //novoda.com/blog/styling-actionbar-searchview

    但是,说实话,这非常黑客.这将是清洁剂抓住从搜索查看源https://android.googlesource.com/platform/frameworks/support.git/+/master/v7/appcompat/src/android/support/v7/widget/SearchView.java和创建自己的SearchView版本,用于隐藏/显示关闭按钮.

    更新:
    Google刚刚发布了AppCompat v21,它对SearchView小部件进行了样式改进:http:
    //android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

    2022-12-20 16:17 回答
  • 设置searchView.setIconifiedByDefault(false)将禁用折叠搜索视图,并删除关闭按钮.

    2022-12-20 16:17 回答
  • 您可以从SearchView对象(AppCompat v23.2.1)获取该按钮的链接:

    searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
    ImageView mCloseButton = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
    

    然后,您可以为SearchView文本更改分配侦听器(SearchView也会更改按钮的可见性,但侦听器将在之后执行并将覆盖这些更改):

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }
    
        @Override
        public boolean onQueryTextChange(String newText) {
            mCloseButton.setVisibility(newText.isEmpty() ? View.GONE : View.VISIBLE);
            return false;
        }
    });
    

    最后,当SearchView从图标化状态展开时,监听器隐藏图标:

    searchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // hide "x" button if there is no text
            String query = searchView.getQuery().toString();
            mCloseButton.setVisibility(query.isEmpty() ? View.GONE : View.VISIBLE);
        }
    });
    

    2022-12-20 16:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有