Is there a way to make SearchView\'s results list occupy whole screen width? I\'ve tried using custom layout for SearchView, but this doesn\'t change the search results list
Yes, it is possible. To achieve this we should set width of whole DropDownView
, not only for items. We can set it by calling setDropDownWidth
of AutoCompleteTextView
. But there is one problem. DropDownView
's width and horizontal offset are calculated inside SearchView
each time its bounds is changed. To get a workaround we can add to SearchView
our own OnLayoutChangeListener
where we calculate and set the height of DropDownView
. The following code is fully working with AppCompat
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// inflate our menu
getMenuInflater().inflate(R.menu.search_menu, menu);
// find MenuItem and get SearchView from it
MenuItem searchMenuItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
// id of AutoCompleteTextView
int searchEditTextId = R.id.search_src_text; // for AppCompat
// get AutoCompleteTextView from SearchView
final AutoCompleteTextView searchEditText = (AutoCompleteTextView) searchView.findViewById(searchEditTextId);
final View dropDownAnchor = searchView.findViewById(searchEditText.getDropDownAnchor());
if (dropDownAnchor != null) {
dropDownAnchor.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
// calculate width of DropdownView
int point[] = new int[2];
dropDownAnchor.getLocationOnScreen(point);
// x coordinate of DropDownView
int dropDownPadding = point[0] + searchEditText.getDropDownHorizontalOffset();
Rect screenSize = new Rect();
getWindowManager().getDefaultDisplay().getRectSize(screenSize);
// screen width
int screenWidth = screenSize.width();
// set DropDownView width
searchEditText.setDropDownWidth(screenWidth - dropDownPadding * 2);
}
});
}
return super.onCreateOptionsMenu(menu);
}
If you use Holo just change the line int searchEditTextId = R.id.search_src_text;
to the below one:
int searchEditTextId = getResources().getIdentifier("android:id/search_src_text", null, null);
You must get reference to SearchAutoComplete object which in my case android.support.v7.widget.SearchView using , then set its size , please check my answer here :
https://stackoverflow.com/a/43480908/5255624