2014-10-10 19 views
6

Có cách nào để làm cho danh sách kết quả của SearchView chiếm toàn bộ chiều rộng màn hình không? Tôi đã thử sử dụng bố cục tùy chỉnh cho SearchView, nhưng điều này không thay đổi chiều rộng của danh sách kết quả tìm kiếm. Xem ảnh chụp màn hình:SearchView chiều rộng danh sách kết quả

enter image description here

+0

Tôi nghĩ chiều rộng kết quả tìm kiếm phụ thuộc vào chiều rộng văn bản chỉnh sửa tìm kiếm – Praveen

+0

@Praveen trong CursorAdapter của tôi Tôi xem chế độ xem có chiều rộng MATCH_PARENt. –

+0

đăng mã của bạn và bố cục bộ điều hợp tùy chỉnh –

Trả lời

21

Vâng, đó là có thể. Để đạt được điều này, chúng ta nên đặt chiều rộng của toàn bộ DropDownView, không chỉ cho các mục. Chúng tôi có thể đặt nó bằng cách gọi setDropDownWidth của AutoCompleteTextView. Nhưng có một vấn đề. DropDownView Chiều rộng và chiều ngang được tính toán bên trong SearchView mỗi lần giới hạn của nó được thay đổi. Để có giải pháp khác, chúng tôi có thể thêm vào số SearchView riêng của chúng tôi OnLayoutChangeListener nơi chúng tôi tính toán và đặt chiều cao là DropDownView. Các mã sau đây được hoàn toàn làm việc với 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); 
} 

Nếu bạn sử dụng Holo chỉ cần thay đổi dòng int searchEditTextId = R.id.search_src_text; đến dưới một:

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

Chúa ơi, tôi ghét tiện ích SearchView – mdelolmo

+1

Đã lưu ngày của tôi, cảm ơn! –

+0

Tác phẩm này chỉ dành cho Android 5.0 trở lên. Nhưng tôi cần cho Android 4.3 – Alexei

-1

Bạn phải có được tham chiếu đến đối tượng SearchAutoComplete mà trong trường hợp của tôi android.support.v7.widget.SearchView sử dụng, sau đó đặt kích thước của nó, vui lòng kiểm tra câu trả lời của tôi tại đây:

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

Các vấn đề liên quan