6

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:

enter image description here

  • 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 Answers2

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 :

https://stackoverflow.com/a/43480908/5255624

Community
  • 1
  • 1
Stav Bodik
  • 2,018
  • 3
  • 18
  • 25