【问题标题】:How to hide close button in searchview when it's empty android当它是空的android时如何在searchview中隐藏关闭按钮
【发布时间】:2016-09-23 19:46:10
【问题描述】:

我正在开发一个 android 应用程序并在其中实现了 searchview。我想在初始化时隐藏搜索视图中的关闭按钮,并且只在我开始输入时显示该按钮。为空时隐藏searchview的关闭按钮。

我已经像下面那样做了。

public void initializeSearchView(){

    SearchManager searchManager = (SearchManager)mContext.getSystemService(Context.SEARCH_SERVICE);
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(((Activity)mContext).getComponentName()));
    mSearchView.setIconifiedByDefault(true);
    mSearchView.setIconified(false);
    mSearchView.clearFocus();
    int searchImgId = mContext.getResources().getIdentifier("android:id/search_mag_icon", null, null);
    ImageView searchIconView = (ImageView) mSearchView.findViewById(searchImgId);
    if(searchIconView != null){
        searchIconView.setImageResource(R.drawable.ic_action_search);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        searchIconView.setLayoutParams(layoutParams);
    }
    int searchPlateId = mSearchView.getContext().getResources().
            getIdentifier("android:id/search_plate", null, null);
    View searchPlate = mSearchView.findViewById(searchPlateId);
    if (searchPlate != null) {
        int searchTextId = searchPlate.getContext().getResources().
                getIdentifier("android:id/search_src_text", null, null);
        final TextView searchText = (TextView) searchPlate.findViewById(searchTextId);
        searchText.setHintTextColor(ContextCompat.getColor(mContext, R.color.gray_stroke_color));
        mSearchView.setQueryHint("Search");
        int searchCloseBtnId = searchPlate.getContext().getResources().
                getIdentifier("android:id/search_close_btn", null, null);
        searchCloseBtn = (ImageView) searchPlate.findViewById(searchCloseBtnId);
        searchCloseBtn.setVisibility(View.GONE);
        searchCloseBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                searchText.setText("");
                mSearchView.clearFocus();
            }
        });
    }
    mSearchView.setOnQueryTextListener(this);
}

我在 searchview 初始化时将 Visibility GONE 设置为关闭按钮,但它不起作用。我该如何实现这一点,如果有人在这里有想法,请提供帮助。

非常感谢。

【问题讨论】:

    标签: android searchview


    【解决方案1】:

    首先,Gone 参数应该可以工作。也许你获取了错误的视图,尝试使用简单的:

     ImageView closeButton =
     (ImageView)mSearchView.findViewById(R.id.search_close_btn);
    

    您也可以尝试为 View 设置 LayoutParams:

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, 0);
    closeBut.setLayoutParams(layoutParams);
    

    【讨论】:

    • Visibility GONE 在我初始化 searchview 时第一次起作用,但随着 searchview 获得焦点,它再次显示,而不是只有当我在 searchview 中键入任何内容时它才应该可见。如果您知道如何实现这一点,请提供帮助。 :)
    • @PrithnirajNicyone 啊,是的,所以 SearchView 处理操作并控制此行为以提高可见性....您尝试使用 LayoutParams 了吗?
    【解决方案2】:
    searchCloseBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //searchText.setText("");
                    //mSearchView.clearFocus();
                    mSearchView.setIconified(false);
                }
            }); 
    

    【讨论】:

      【解决方案3】:

      试一试:

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

      因为当用户与 SearchView 交互时,SearchView 会重置其关闭按钮的可见性。

      【讨论】:

      • 我已经尝试过了,当 searchview 初始化时关闭按钮会被隐藏,但即使我在 searchView 中键入任何测试,关闭按钮也不会显示。当我在 searchview 中输入查询时,它也应该显示按钮。
      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2016-03-06
      • 2017-09-27
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多