16

Tôi đã chuyển từ ActionBarSherlock sang ActionBarCompat (thư viện hỗ trợ v7). Sau một số điều chỉnh, hầu như mọi thứ đều hoạt động tốt ngay bây giờ.SearchView lấy tất cả không gian trong ActionBarCompat mới

Nhưng tôi đang gặp rắc rối với SearchView trong ActionBar. Khi nó được mở rộng (trên thực tế, nó luôn được mở rộng trong Hoạt động của tôi), nó chiếm toàn bộ không gian và không tôn trọng không gian của các mục tác vụ khác được đặt để hiển thị luôn (showAsAction = "always").

Để mô phỏng vấn đề, sử dụng này:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/menu_buscar" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     android:icon="@drawable/abc_ic_search" 
     app:showAsAction="always" 
     android:title="@string/buscar"/> 

    <item android:id="@+id/tentar_novamente" 
      android:title="@string/tentar_novamente" 
      android:icon="@drawable/acao_tentar_novamente" 
      app:showAsAction="always" /> 

</menu> 

Trong Hoạt động:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.busca_action_menu, menu); 

    searchMenuItem = menu.findItem(R.id.menu_buscar); 
    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); 

    searchView.setIconifiedByDefault(false); 
    searchView.setQueryHint(stringBusqueArtistasMusicasEAlbuns); 

    return super.onCreateOptionsMenu(menu); 
} 

Đây là kết quả trong android 4.3:

enter image description here

Và đây là kết quả trong android 2.3 (các mục hành động thậm chí không xuất hiện):

enter image description here

Vấn đề tương tự xảy ra khi tôi sử dụng:

setSupportProgressBarIndeterminateVisibility(true); 

chỉ Tiến độ xuất hiện rất lạ trong Android 4.3 và không xuất hiện trong Android 2.3.

Mã tương tự đã hoạt động như mong đợi với ActionBarSherlock. Khi có một số mục hành động, SearchView được sử dụng để giảm chiều rộng của nó để cung cấp khoảng trống cho các mục tác vụ.

UPDATE:

tôi đã đăng một vấn đề trong Tracker Bug của Android: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

Nếu bạn có cùng một vấn đề, hãy làm theo vấn đề này.

UPDATE:

tôi đã cố gắng để đưa các hành động trước khi SearchView và cách này họ mục xuất hiện.

enter image description here

Tuy nhiên, setSupportProgressBarIndeterminateVisibility (true) vẫn không hiển thị thanh tiến trình.

+1

Dude, xin lỗi vì là một ngữ pháp phát xít, nhưng đó là "Álbumes" –

+1

@LuisLavieri, Nó không phải là tiếng Tây Ban Nha, nó là tiếng Bồ Đào Nha. –

+0

Tệ của tôi! Wow, nó là như vậy tương tự. –

Trả lời

1

Bạn đã thử sử dụng collapseActionView() chưa?

tôi sử dụng nó như thế này:

public static MenuItem msearchMenuItem; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 

    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = 
      (SearchView) menu.findItem(R.id.search).getActionView(); 

    searchView.setSearchableInfo(
      searchManager.getSearchableInfo(getComponentName())); 



    msearchMenuItem = menu.findItem(R.id.search); 

    return true; 
} 
public static MenuItem getSearchMenuItem() { 
    return msearchMenuItem; 
} 

public void doSomething(){ 
    //Collapse the SearchBar 
    getSearchMenuItem().collapseActionView(); 
} 

Tôi không biết nếu nó hoạt động với v7, nhưng chắc chắn nó làm việc với v4.

Hãy thử thay đổi android: showAsAction = "collapseActionView | ifRoom"

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/search" 
     android:title="@string/search_title" 
     android:icon="@drawable/ic_search" 
     android:showAsAction="collapseActionView|ifRoom" 
     android:actionViewClass="android.widget.SearchView" /> 
</menu> 
+0

Cảm ơn câu trả lời của bạn, nhưng mục đích duy nhất của màn hình của tôi là tìm kiếm, vì vậy tôi muốn SearchView hiển thị mọi lúc. Và mã của tôi đã được làm việc trước khi V7, vấn đề là với V7. Tôi chỉ muốn có một giải pháp cho lỗi này cho đến khi Google phát hành phiên bản tiếp theo với lỗi này được sửa. –

+0

Tôi không hiểu. Bạn không muốn có quyền truy cập vào các biểu tượng khác trong khi bạn không tìm kiếm? Hay bạn muốn mở rộng mọi lúc? –

+0

Với ActionBarSherlock, ngay cả khi mở rộng SearchView, tôi cũng có thể truy cập các mục tác vụ. Dù sao, đặt các mục hành động đầu tiên, tôi có thể nhìn thấy chúng với ActionBarCompat. Vấn đề chính của tôi bây giờ là thanh tiến trình không hiển thị với ActionBarCompat. Nó được hiển thị bình thường với ActionBarSherlock. –

0

Tháo dòng

searchView.setIconifiedByDefault(false); 

Hoặc bạn một cách rõ ràng có thể gọi phương thức với true làm đối số.

+0

Như tôi đã nói trước đó, tôi muốn SearchView của mình hiển thị mọi lúc. Vì vậy, giải pháp của bạn sẽ không hoạt động. –

5

này chắc chắn là một lỗi về Android nhưng một workaround có thể được bao gồm SearchView lập trình như thế này:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    SearchView searchView = new SearchView(getSupportActionBar().getThemedContext()); 
    searchView.setIconifiedByDefault(false); 
    getActionBar().setCustomView(searchView); 
    getActionBar().setDisplayShowCustomEnabled(true); 
} 

Bạn cũng có thể sử dụng một XML layout để xác định tính chất SearchView. Tuy nhiên "iconifiedByDefault" trong XML có xu hướng không hiệu quả trong kinh nghiệm của tôi. (Điều này có thể xấu của tôi mặc dù)

Cảm ơn bạn đã tạo sự cố về vấn đề này. Đây là URL để báo cáo lỗi liên quan: https://code.google.com/p/android/issues/detail?id=58251

Mặc dù những gì được đề cập trong báo cáo lỗi, kinh nghiệm của tôi là cùng với cả ActionBarSherlock và ActionBarCompat. Vì vậy, tôi hy vọng rằng người dùng ActionBarSherlock cũng bị ảnh hưởng.

+0

Cách giải quyết này hoạt động như một sự quyến rũ! – kgrevehagen

+0

Cảm ơn người đàn ông! Đó chắc chắn là lỗi trong "thực" ActionBar không ActionBarCompat chỉ. – headsvk