2012-12-22 33 views
8

Tôi thiết lập SearchWidget như được mô tả trong Android API Guide. Nó hiển thị đúng biểu tượng kính lúp trong Thanh tác vụ và nếu tôi nhấp vào nó, nó sẽ khởi chạy tiện ích tìm kiếm trong Thanh tác vụ (trường nhập với nền tối).Hiển thị SearchWidget trong ActionBar nếu người dùng nhấn nút tìm kiếm của thiết bị

Tuy nhiên, nếu tôi nhấn nút tìm kiếm của thiết bị ảo, khi đó một trường tìm kiếm khác được khởi chạy: Nó có nền trắng và không gọi phương thức gọi lại mà tôi đã chỉ định.

Vì vậy, tôi đã thêm này để lớp MainActivity tôi:

public boolean onSearchRequested() { 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setIconified(!searchView.isIconified()); 
    return false; 
} 

Các thiết lập của widget tìm kiếm là chính xác giống như nó được mô tả trong các tài liệu:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
searchView.setIconifiedByDefault(false); 
searchView.setOnQueryTextListener(new CustomSearchQueryTextListener()); 

searchable.xml My :

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name"> 
</searchable> 

Và AndroidManifest.xml:

<activity 
     android:name="MainActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:uiOptions="splitActionBarWhenNarrow" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> 
    </activity> 

Lý do tại sao tôi đã thử setIconfied() phương pháp là trong API Android Hướng dẫn nó nói dưới "Khả năng chuyển đổi khả năng hiển thị hộp tìm kiếm":

"Theo mặc định, widget tìm kiếm được "biểu tượng hóa", nghĩa là nó là chỉ được biểu thị bằng biểu tượng tìm kiếm (kính lúp) và mở rộng thành hiển thị hộp tìm kiếm khi người dùng chạm vào nó. Như được hiển thị ở trên, bạn có thể hiển thị hộp tìm kiếm theo mặc định, bằng cách gọi setIconifiedByDefault (sai). Bạn cũng có thể chuyển đổi việc tìm kiếm phụ tùng xuất hiện bằng cách gọi setIconified() "

Tôi cũng đã cố gắng gọi startSearch("", false, null, false); nhưng điều này sẽ trả về lĩnh vực tìm kiếm cùng với nền trắng

Vì vậy, câu hỏi của tôi là..: Có thể khởi chạy tiện ích tìm kiếm trong thanh tác vụ nếu người dùng nhấn nút tìm kiếm của thiết bị, tức là biểu mẫu chính xác giống như hành động của mục menu tìm kiếm được nhấp không?

Trả lời

10

Khi viết câu hỏi này, tôi đã đưa ra giải pháp Tôi vẫn quyết định đăng nó cùng với câu trả lời, bởi vì nó không có vẻ như câu hỏi này đã được hỏi về SO trước và có thể ai đó gặp phải vấn đề tương tự và/hoặc đưa ra một giải pháp tốt hơn.

Tất cả bạn cần làm là gọi expandActionView() trên menu tìm kiếm, và mọi thứ hoạt động như mong đợi:

public boolean onSearchRequested() { 
    menu.findItem(R.id.menu_search).expandActionView(); 
    return true; 
} 
Các vấn đề liên quan