2016-02-15 4 views
1

Situation:Android SearchView écran de menu déroulant Largeur

J'ai un widget SearchView dans ma barre d'outils qui permet appcompat des suggestions personnalisées via SQLiteDatabase.

Problème:

Je ne parviens pas à élargir la liste déroulante des suggestions liste à la largeur de l'écran. Au mieux, la largeur de la liste est presque la largeur de l'écran, sauf pour les petits problèmes de marge/rembourrage sur les côtés gauche et droit. Comment faire pour que la liste déroulante ait la même largeur que l'écran?

choses que j'ai essayé:

SearchView results list width

setPadding de AutoCompleteText, Setright/setLeft, setDropDownHorizontalOffset, la mise en mise en page params et réglage de la largeur à match_parent.

Menu/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"/> 

res/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"/> 

activité/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); 
      } 
     }); 
    } 

Répondre

2

La taille de la largeur souhaitée, peut être réaliser par en utilisant le contenu Wrap. Essayez ce code: searchAutoCompleteTextView.setDropDownWidth (ViewGroup.LayoutParams.WRAP_CONTENT);

Je suis venu à cette réponse quand je suis passé par ce lien:

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

+0

Je TRIE d l'ajouter en dehors de addOnLayoutChangeListener puis à l'intérieur. Il n'y avait pas de différence avec mon code d'origine. –

+0

ok veuillez utiliser AutocompleteTextview dans xml au lieu de textview et garder layout_width = "fill parent". – SourabhMore

0

Vous devez faire référence à l'objet SearchAutoComplete qui SearchView à l'aide, puis définissez sa taille et changer la ressource de base qui a de rembourrage, s'il vous plaît se référer à ma réponse ici:

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