2016-02-15 6 views
1

положения:Android SearchView выпадающего экрана меню Ширин

У меня есть SearchView виджет в моих AppCompat панели инструментов, что позволяет пользовательские предложения по sqlitedatabase.

Проблема:

У меня возникли проблемы расширяющегося выпадающий список предложений, чтобы быть всю ширину экрана. В лучшем случае ширина списка - это почти ширина экрана, за исключением небольших проблем с запасом/запасом слева и справа. Как сделать выпадающий список той же ширины, что и экран?

Что я пробовал:

SearchView results list width

setPadding AutoCompleteText в, setRight/setLeft, setDropDownHorizontalOffset, установка макета Params, и установка ширины будет match_parent.

меню/search.xml

<item 
    android:id="@+id/search_restaurant" 
    android:title="Search" 
    android:icon="@drawable/search" 
    android:orderInCategory="2" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="always"/> 

Рез/search_view_suggestions_list_item

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:background="@android:color/white" 
    android:gravity="center_vertical" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall"/> 

активность/Activity.java

MenuItem searchItem = menu.findItem(R.id.search_restaurant); 
    searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    searchView.setQueryHint("Search Restaurant"); 
    searchView.setOnQueryTextListener(this); 
    searchView.setOnSuggestionListener(this); 
    final AutoCompleteTextView searchAutoCompleteTextView = (AutoCompleteTextView) searchView 
      .findViewById(R.id.search_src_text); 
    searchAutoCompleteTextView.setThreshold(1); 
    searchAutoCompleteTextView.setDropDownWidth(ViewGroup.LayoutParams.MATCH_PARENT); 

    // Tried to change margins/padding here 
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) 
      searchAutoCompleteTextView.getLayoutParams(); 
    params.setMargins(0, 0, 0, 0); 
    searchAutoCompleteTextView.setLayoutParams(params); 
    searchAutoCompleteTextView.setPadding(0, 0, 0, 0); 

    searchAutoCompleteTextView.setDropDownHorizontalOffset(-100); 
    searchAutoCompleteTextView.setPadding(0,0,0,0); 
    searchAutoCompleteTextView.setLeft(0); 

    final View dropDownSuggestions = searchView.findViewById(searchAutoCompleteTextView 
      .getDropDownAnchor()); 
    if (dropDownSuggestions != null) { 
     dropDownSuggestions.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) { 
       int point[] = new int[2]; 

       dropDownSuggestions.getLocationOnScreen(point); 
       int dropDownPadding = point[0] + searchAutoCompleteTextView 
         .getDropDownHorizontalOffset(); 

       Rect screenSize = new Rect(); 
       getWindowManager().getDefaultDisplay().getRectSize(screenSize); 
       int screenWidth = screenSize.width(); 
       searchAutoCompleteTextView.setDropDownWidth(screenWidth * 2); 
      } 
     }); 
    } 

ответ

2

Размер ширины вы хотите, может быть достигнуть путем используя Wrap content. Попробуйте этот код: searchAutoCompleteTextView.setDropDownWidth (ViewGroup.LayoutParams.WRAP_CONTENT);

Я пришел к этому ответу, когда я пошел по этой ссылке:

https://www.youtube.com/watch?v=408pMAQFnvs

+0

I TRIE d добавляя его вне addOnLayoutChangeListener, а затем внутри. От моего исходного кода не было никакой разницы. –

+0

ok используйте AutocompleteTextview в xml вместо textview и сохраняйте layout_width = "fill parent". – SourabhMore

0

Вы должны получить ссылку на объект SearchAutoComplete который SearchView с помощью, а затем установить его размер и изменить фоновый ресурс, который есть обивка, пожалуйста, обратитесь к моему ответу здесь:

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