2013-04-07 29 views
6

Khi sử dụng giao diện tìm kiếm trên thanh hành động, tiện ích mở rộng để chiếm toàn bộ chiều rộng của màn hình ở chế độ dọc, nhưng dừng ngắn ở chế độ ngang.ActionBar SearchView không hoàn toàn mở rộng ở chế độ ngang

Có cách nào để đặt thông số bố cục mở rộng trên SearchView để điền đầy đủ thanh tác vụ khi người dùng đang nhập tìm kiếm không?

Xem hình ảnh: http://i.imgur.com/3z8ZbJA.png

Lưu ý: Tôi không đang sử dụng ActionBar Sherlock

Edit: Đây là những gì tôi đã làm để có được nó để mở rộng toàn bộ chiều rộng.

searchView.setOnSearchClickListener(new OnClickListener() { 
    private boolean extended = false; 

    @Override 
    public void onClick(View v) { 
     if (!extended) { 
      extended = true; 
      LayoutParams lp = v.getLayoutParams(); 
      lp.width = LayoutParams.MATCH_PARENT; 
     } 
    } 

}); 

Trả lời

4

Bạn đã thử một cái gì đó như thế?

editView.setOnKeyListener(new OnKeyListener() { 
    private boolean extended = false; 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (!extended && event.getAction() == KeyEvent.ACTION_DOWN) { 
      extended = true; 
      LayoutParams lp = v.getLayoutParams(); 
      lp.width = LayoutParams.MATCH_PARENT; 
     } 

     return false; 
    } 

}); 
+0

Close. Tôi cần phải sử dụng 'setOnSearchClickListener() 'vì tôi sẽ không tìm kiếm báo chí phần cứng. –

0

Tôi đã tìm ra giải pháp để mở rộng hoàn toàn chế độ xem tìm kiếm theo chiều ngang và cũng có chế độ xem hành động đã được mở rộng khi hoạt động được tạo. Dưới đây là cách hoạt động:

1.Đầu tiên tạo tệp xml trong thư mục trình đơn của bạn được gọi là ví dụ: searchview_in_menu.xml. Ở đây bạn sẽ có đoạn mã sau:

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:id="@+id/action_search" 
       android:title="@string/search" 
       android:icon="@android:drawable/ic_menu_search" 
       android:actionLayout="@layout/searchview_layout" /> 
    </menu> 

Lưu ý: "@ string/tìm kiếm" - trông giống như thế này trong res-strings.xml:

<string name="search">Search</string> 

2.Second tạo bố trí gọi ở trên ("@ layout/searchview_layout") trong thư mục bố cục lại. Cách bố trí mới: searchview_layout.xml sẽ trông như thế này:

<?xml version="1.0" encoding="utf-8"?> 
    <SearchView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/search_view_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

Lưu ý: Ở đây chúng ta đang thiết lập chiều rộng view tìm kiếm để phù hợp với chiều rộng của mẹ (android: layout_width = "match_parent")

3 .in lớp MainActivity của bạn hoặc trong các hoạt động mà đã thực hiện Kiện Tìm Kiếm Xem ghi trong onCreateOptionsMenu() phương pháp đoạn mã sau:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.searchview_in_menu, menu); 
     //find the search view item and inflate it in the menu layout 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     mSearchView = (SearchView) searchItem.getActionView(); 
     //set a hint on the search view (optional) 
     mSearchView.setQueryHint(getString(R.string.search)); 
     //these flags together with the search view layout expand the search view in the landscape mode 
     searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
       | MenuItem.SHOW_AS_ACTION_ALWAYS); 
     //expand the search view when entering the activity(optional) 
     searchItem.expandActionView(); 
     return true; 
} 
0

Điều chỉnh param bố trí rộng để MATCH_PARENT, cách mà các SearchView sẽ hoàn toàn mở rộng trong hoặc chân dung hoặc phong cảnh

ViewGroup.LayoutParams layoutParams = mSearchView.getLayoutParams(); 
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; 
0

Đối ActionBarCompat sử dụng này:

MenuItemCompat.setShowAsAction(searchItem, MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
      | MenuItem.SHOW_AS_ACTION_ALWAYS); 
    MenuItemCompat.expandActionView(searchItem); 
+0

Làm thế nào mịn để đạt được trong ActionBar này? – Darklex

0

Sử dụng này (100%):

mSearchView = (SearchView) searchItem.getActionView();  
mSearchView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
12

SearchView MenuItemCompat của có một tài sản mang tên maxWidth.

final MenuItem searchItem = menu.findItem(R.id.action_search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    searchView.setMaxWidth(xxx); 

chiều rộng sử dụng màn hình thay vì xxx offcourse

+6

searchView.setMaxWidth (Integer.MAX_VALUE); –