How to display searchview close icon when expanded

2019-06-06 00:09发布

I have an imageView. When i click image, i am hidding image and enabling searchview in expanded. But problem is close icon is not visible. How to make close icon visible when searchview in expanded form?

Here is my piece of code:

  public class HomeActivity extends Activity{
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);   
 search = (SearchView) findViewById(R.id.search);
    searchImage=(ImageView) findViewById(R.id.search_image);

  searchImage.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            search.setVisibility(View.VISIBLE);
            search.setIconifiedByDefault(false); // here i am disabling default icon
            searchImage.setVisibility(View.GONE);

        }
    });

 //This function not works as close icon not visible.
     search.setOnCloseListener(new OnCloseListener() {

        @Override
        public boolean onClose() {
            searchImage.setVisibility(View.VISIBLE);
            return false;
        }
    });

Here is screenshot where close icon at top right not visible: enter image description here

5条回答
等我变得足够好
2楼-- · 2019-06-06 00:14

the back option will display when you use[Complete concept about SearchView]

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="blackmonk.mobile.activity.SearchActivity" >

<item
    android:id="@+id/action_searchh"
    android:actionViewClass="android.support.v7.widget.SearchView"
    android:icon="@drawable/ic_search"
    android:showAsAction="ifRoom|collapseActionView"
    android:title="@string/search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always"/>

</menu>

and use

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.search_menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_searchh);
    mSearchView = (SearchView) searchItem.getActionView();
    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_searchh)
            .getActionView();
    searchView.setSearchableInfo(searchManager
            .getSearchableInfo(getComponentName()));
    searchView.setQueryHint("Search here");
    //to expand search bar
    searchItem.expandActionView();
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.action_search:

        break;
    case android.R.id.home:
        onBackPressed();
        return true;
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

If you want to get Query String use this:

Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String searchQuery = intent.getStringExtra(SearchManager.QUERY);
}

Dont forget to add this code in your Manifest Activity

  <activity
        android:name="blackmonk.mobile.activity.SearchActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </action>
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/search" />
    </activity>
查看更多
SAY GOODBYE
3楼-- · 2019-06-06 00:20
int search_close_btnId = android.support.v7.appcompat.R.id.search_close_btn;
ImageView search_close_btn = (ImageView) searchView.findViewById(search_close_btnId);
search_close_btn.setImageResource(R.drawable.ic_close_search);
查看更多
一纸荒年 Trace。
4楼-- · 2019-06-06 00:21
int searchCloseIconButtonId = SearchView.getContext().getResources()
            .getIdentifier("android:id/search_close_btn", null, null);
    ImageView closeButton = (ImageView) this.mSearchView.findViewById(searchCloseIconButtonId);
    closeButton.setImageResource(R.mipmap.close); //any icon image

If you want you can add click listener on closeButton

查看更多
不美不萌又怎样
5楼-- · 2019-06-06 00:33

Try this

  searchView.setOnCloseListener(new OnCloseListener() {

        @Override
        public boolean onClose() {
            searchView.clearFocus();
            return false;
        }
    });
查看更多
神经病院院长
6楼-- · 2019-06-06 00:37

Use the attribute app:closeIcon="@drawable/ic_my_close_icon" in your SearchView or android.support.v7.widget.SearchView

Use xmlns:app="http://schemas.android.com/apk/res-auto"

查看更多
登录 后发表回答