SearchView results list width

前端 未结 2 924
说谎
说谎 2020-12-15 01:13

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

相关标签:
2条回答
  • 2020-12-15 01:42

    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);
    
    0 讨论(0)
  • 2020-12-15 02:04

    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

    0 讨论(0)
提交回复
热议问题