How to display searchview close icon when expanded in android?

大憨熊 提交于 2020-01-03 03:44:08

问题


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:


回答1:


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"




回答2:


Try this

  searchView.setOnCloseListener(new OnCloseListener() {

        @Override
        public boolean onClose() {
            searchView.clearFocus();
            return false;
        }
    });



回答3:


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>



回答4:


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);



回答5:


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




回答6:


Since SearchView always set Close button to Gone after onFocusChange, I did this in inelegant way.

public void onFocusChange(View view, boolean b) {
    Util.Android.scheduleRunOnUi(Util.Android.getActivity(view), ()->mCloseView.setVisibility(VISIBLE), 500);
}


来源:https://stackoverflow.com/questions/27706192/how-to-display-searchview-close-icon-when-expanded-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!