2014-10-10 13 views
6

Czy istnieje sposób, aby lista wyników SearchView zajmowała całą szerokość ekranu? Próbowałem używać niestandardowego układu dla SearchView, ale to nie zmienia szerokości listy wyników wyszukiwania. patrz obrazek:SearchView lista wyników szerokość

enter image description here

+0

Myślę, że szerokość wyniku wyszukiwania zależy od szerokości tekstu edycji wyszukiwania – Praveen

+0

@Praveen w moim CursorAdapter I zawyżam widok o szerokości MATCH_PARENt. –

+0

opublikować kod i niestandardowy układ adaptera –

Odpowiedz

21

Tak, jest to możliwe. Aby to osiągnąć, powinniśmy ustawić szerokość całego DropDownView, nie tylko dla przedmiotów. Możemy ustawić go, dzwoniąc pod numer setDropDownWidth z AutoCompleteTextView. Ale jest jeden problem. DropDownView Szerokość i przesunięcie w poziomie są obliczane wewnątrz SearchView za każdym razem, gdy zmienia się jego zakres. Aby obejść ten problem, możemy dodać do SearchView nasze własne OnLayoutChangeListener, w którym obliczamy i ustawiamy wysokość DropDownView. Poniższy kod jest w pełni współpracuje z 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); 
} 

Jeśli używasz Holo tylko zmienić linię int searchEditTextId = R.id.search_src_text; do poniżej jednego:

int searchEditTextId = getResources().getIdentifier("android:id/search_src_text", null, null); 
+1

Boże, nienawidzę widżetu SearchView – mdelolmo

+1

Uratowałem mój dzień, dzięki! –

+0

To działa tylko na Androida 5.0+. Ale potrzebuję Androida 4.3 – Alexei

-1

Musisz uzyskać odniesienie do obiektu SearchAutoComplete co w moim przypadku android.support.v7.widget.SearchView za pomocą, a następnie ustawić jego rozmiar, sprawdź moją odpowiedź tutaj:

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