16

Przełączyłem się z ActionBarSherlock na ActionBarCompat (biblioteka pomocy v7). Po pewnych korektach prawie wszystko działa dobrze.SearchView zajmująca całą przestrzeń w nowym ActionBarCompat

Ale mam kłopoty z SearchView w pasku akcji. Kiedy jest rozwinięty (w rzeczywistości jest zawsze rozszerzany w mojej Działalności), zajmuje całą przestrzeń i nie szanuje przestrzeni innych elementów akcji, które są ustawione tak, aby zawsze pokazywały się (showAsAction = "zawsze").

Aby symulować ten problem, użyj tego:

<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> 

W Aktywny:

@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); 
} 

Jest to wynik w Android 4.3:

enter image description here

I to wynik w Androidzie 2.3 (elementy akcji nawet się nie pojawiają):

enter image description here

Ten sam problem występuje, gdy używam:

setSupportProgressBarIndeterminateVisibility(true); 

wskaźnik Postęp wydaje się bardzo dziwne w Androidzie 4.3 i nie pojawia się w Android 2.3.

Ten sam kod działał zgodnie z oczekiwaniami w ActionBarSherlock. Kiedy był jakiś element akcji, SearchView użył, aby zmniejszyć jego szerokość, aby dać miejsce dla elementów akcji.

UPDATE:

ja pisał problemu w Android Bug Tracker: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

Jeśli masz ten sam problem, należy wykonać ten problem.

UPDATE:

Próbowałem umieścić elementy działania przed SearchView iw ten sposób pojawiają się przedmioty.

enter image description here

Ale, setSupportProgressBarIndeterminateVisibility (prawda) nadal nie pokazuje pasek postępu.

+1

Stary, przepraszam za gramatyczną nazistę, ale to "Álbumes" –

+1

@LuisLavieri, To nie jest hiszpański, to portugalski. –

+0

Mój zły! Wow, jest bardzo podobny. –

Odpowiedz

1

Czy próbowałeś używać collapseActionView()?

używam go tak:

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(); 
} 

Nie wiem, czy to działa z v7, ale na pewno działa z v4.

Spróbuj zmieniającą androida: 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

Dzięki za odpowiedź, ale jedynym celem mojego ekranu jest wyszukiwanie, więc chcę, aby wyszukiwarka była cały czas widoczna. Mój kod działał przed V7, problem dotyczy V7. Chciałbym mieć obejście tego błędu, dopóki Google nie usunie następnej wersji z tym błędem. –

+0

Nie rozumiem. Czy nie wolałbyś mieć dostępu do innych ikon, gdy nie szukasz? A może chcesz cały czas go rozszerzać? –

+0

Dzięki ActionBarSherlock, nawet po rozszerzeniu SearchView, mogłem uzyskać dostęp do elementów akcji. W każdym razie, umieszczając elementy akcji jako pierwsze, jestem w stanie je zobaczyć za pomocą ActionBarCompat. Moim głównym problemem jest to, że pasek postępu nie jest wyświetlany w ActionBarCompat. Normalnie pokazywał się z ActionBarSherlock. –

0

Usuń linię

searchView.setIconifiedByDefault(false); 

Albo można jawnie wywołać metodę z true jako argumentu.

+0

Tak jak powiedziałem wcześniej, chcę, aby mój SearchView był cały czas widoczny. Twoje rozwiązanie nie zadziała. –

5

Jest to zdecydowanie bug o Androida, ale obejście może być w tym SearchView programowo tak:

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

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

Można również użyć XML układu do definiowania właściwości SearchView. Jednak "iconifiedByDefault" w XML wydaje się być nieefektywny w moim doświadczeniu. (To może być moje złe)

Dzięki za stworzenie problemu na ten temat. Oto URL powiązanego raportu o błędzie: https://code.google.com/p/android/issues/detail?id=58251

Wbrew temu, co jest wymienione w raporcie o błędzie, moje doświadczenie było takie samo zarówno ActionBarSherlock i ActionBarCompat. Spodziewam się, że dotyczy to również użytkowników ActionBarSherlock.

+0

To obejście zadziałało jak czar! – kgrevehagen

+0

Dzięki! To zdecydowanie błąd w "prawdziwym" ActionBar nie tylko ActionBarCompat. – headsvk

Powiązane problemy