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's width. See screenshot:
Asked
Active
Viewed 3,122 times
6
-
I think search result width depends on search edit text width – Praveena Oct 10 '14 at 12:33
-
@Praveen in my CursorAdapter I inflate view with width MATCH_PARENt. – Oct 10 '14 at 12:39
-
post your code and custom adapter layout – Zubair Ahmed Oct 13 '14 at 10:36
-
Do you use `AppCompat`? – erakitin Oct 13 '14 at 11:24
-
Have you tried [setDropDownWidth](http://developer.android.com/reference/android/widget/AutoCompleteTextView.html#setDropDownWidth(int))? If not try calling `setDropDownWidth(LayoutParams.MATCH_PARENT)` on `AutoCompleteTextView` instance. Even you can try `setDropDownWidth(getResources().getDisplayMetrics().widthPixels)`. – Manish Mulimani Oct 14 '14 at 05:11
2 Answers
22
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);

erakitin
- 11,437
- 5
- 44
- 49
-1
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 :

Community
- 1
- 1

Stav Bodik
- 2,018
- 3
- 18
- 25