how to set an expanding animation to a searchview - android

I want to set an expanding animation to a searchview and I try to apply the method that I found:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) item.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
final int searchBarId = searchView.getContext().getResources().getIdentifier("android:id/search_bar", null, null);
LinearLayout searchBar = (LinearLayout) searchView.findViewById(searchBarId);
searchBar.setLayoutTransition(new LayoutTransition());
return true;
}
However, the variable searchBar is always null and it always crashes at the line
searchBar.setLayoutTransition(new LayoutTransition());
I don't know what is causing the error. Can someboby help me out? Thanks!

I had the same problem. It turns out that you get null in your searchBar if you use android.support.v7.widget.SearchView
I changed it to android.widget.SearchView (recommended if supporting api > 11). Now I get the needed linear layout and animation works fine.
Edit
If you need a support version, you have to use proper id: LinearLayout searchBar = (LinearLayout) mFilterInput.findViewById(android.support.v7.appcompat.R.id.search_bar);

Related

Android SearchView: Show suggestions in a custom view, not listview

I am implementing a searchview for my app. Here is how i set my searchview:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
this.menu = menu;
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
#Override
public boolean onQueryTextSubmit(String query) {
return false;
}
#Override
public boolean onQueryTextChange(String query) {
loadHistory(query);
return true;
}
});
return true;
}
I want to show search suggestions to user when user starts typing. I can do this using a listview:
private void loadHistory(String query) {
// query db etc...
SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();
search.setSuggestionsAdapter(new ExampleAdapter(this, cursor, items));
}
But suppose I do not want to show search suggestions as a listview, and show them in a custom view, where I can add some more stuff to my layout other then just search suggestions. For example, I want to show the following custom view instead of suggested searches listview:
How can I do that? There is a function for setting suggestions adapter, setSuggestionsAdapter(adapter), but I could not find a function like setCustomSuggestionsView(view).
Thanks.
I think what you need is a recycler view for your results. Please see this answer for more information. A recycler view gives you all the freedom layout wise. To use more viewtypes see this post. Hope this helps. I am not familliar enough with your case from your description.

Toolbar is showing on left of SearchView in android

I want to show Back button but distorted ToolBar is coming on left as in the following image.
#Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_main, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
TextView tv = (TextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
tv.setTextColor(getResources().getColor(android.R.color.white));
tv.setHintTextColor(getResources().getColor(android.R.color.white));
tv.setHint(getString(R.string.action_search));
ImageView imgCloseIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
imgCloseIcon.setImageResource(R.drawable.cross_btn);
searchView.setOnQueryTextListener(this);
}
How to show Back button and hide distorted ToolBar ??
I have used the below code and its working fine for me,
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(queryTextListener);

SearchView is occupying entire actionBar Space

In my application i am trying to add an searchView in actionbar. But while clicking on the search icon searchView is expanding to the entire actionbar while clicking the key down it is coming to normalView.
While clicking on the search icon. It is coming like this..
But I want a behavior like this..
options_menu.xml
<item
android:id="#+id/search"
myapp:actionViewClass="android.support.v7.widget.SearchView"
myapp:showAsAction="ifRoom|collapseActionView"
android:icon="#drawable/ic_action_search"
android:title="#string/search_title"/>
onCreateOptions() method
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.options_menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.search);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
mSearchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
mSearchView.setBaselineAligned(false);
return super.onCreateOptionsMenu(menu);
}
please help me..Thanks in advance...
Add this line in your onCreateOptionsMenu()
searchView.setIconifiedByDefault(false);
Any particular reason to write the property twice in menu.xml ?
I just commented the code like this...Now it is working properly...
case R.id.search:
//onSearchRequested();
return true;

Android SearchView: styling suggestions list

I have problems to style the suggestions list from a ActionBar SearchView (support v7).
Which style attribute I have to style to change the background and text color?
Ralph
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
// Theme the SearchView's AutoCompleteTextView drop down. For some reason this wasn't working in styles.xml
SearchAutoComplete autoCompleteTextView = (SearchAutoComplete) searchView.findViewById(R.id.search_src_text);
if (autoCompleteTextView != null) {
autoCompleteTextView.setDropDownBackgroundResource(R.drawable.abc_search_dropdown_light);
}
}

No submit button for searchView Android app

I use searchview in my Android app and I would like to add a button that user presses to start the search. Based on what I read on the Internet, I can use setSubmitButtonEnabled to invoke a submit button instead of putting a button in the layout file. Here's my code:
public void setSubmitButtonEnabled (boolean enabled) {
}
I put my setSubmitButtonEnabled in the menu inflater as below:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mylist, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
setSubmitButtonEnabled(true);
return true;
}
Apparently I am not doing it right because when I launch my app, I don't see any submit button on the screen. What's missing or what's wrong in my code? Is the submit button supposed to appear on the keypad or on the screen? Thank you.
You need to call
searchView.setSubmitButtonEnabled(true)
Why would you create your own version with no body and expect it to do anything?
For this use
searchView=findViewById(R.id.search_box);
searchView.setSubmitButtonEnabled(true);
For submit button icon use
app:goIcon="#drawable/ic_arrow_forward_black_24dp"
For SearchView default expanded
app:iconifiedByDefault="false"

Categories

Resources