[Search widget for Android] How to hide the close button in the default search mode?

I implemented Android SearchViewin ActionBar. When it SearchViewreceives focus, the close button [x] appears on the right. I looked at other native Android apps such as Contacts and Gmail. The close button is not displayed when it SearchViewreceives focus.

How to configure my SearchViewto behave like that?

+8
source share
6 answers

The setting searchView.setIconifiedByDefault(false)will disable the collapse of the search view and also remove the close button.

+13
source

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. , :

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

:
http://novoda.com/blog/styling-actionbar-searchview

, . 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

+11

,

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

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);
    }
});
+6

. . , , app:closeIcon app:closeIcon="@null"

  <androidx.appcompat.widget.SearchView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:closeIcon="@null"   <!-- This simple solution -->
    app:iconifiedByDefault="false" />
+3

AndroidX android.support.v7.appcompat.R.id.search_close_btn

,

app:closeIcon="@null"
0

All Articles