16

Ich wechselte von ActionBarSherlock zu ActionBarCompat (Support-Bibliothek v7). Nach einigen Anpassungen funktioniert mittlerweile fast alles.SearchView nimmt den gesamten Platz in der neuen ActionBarCompat

Aber ich habe Probleme mit der SearchView in der ActionBar. Wenn es erweitert wird (eigentlich wird es immer in meiner Aktivität erweitert), nimmt es den gesamten Platz ein und respektiert nicht den Platz von anderen Aktionselementen, die so eingestellt sind, dass sie immer angezeigt werden (showAsAction = "immer").

das Problem zu simulieren, verwenden Sie diese:

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

In der Aktivität:

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

Dies ist das Ergebnis in der Android 4.3:

enter image description here

Und das ist das Ergebnis in der Android 2.3 (die Aktion Elemente erscheint nicht einmal):

enter image description here

Das gleiche Problem tritt auf, wenn ich benutze:

setSupportProgressBarIndeterminateVisibility(true); 

Die Fortschrittsanzeige in der Android 4.3 sehr seltsam erscheint und erscheint nicht in Android 2.3.

Derselbe Code funktionierte wie erwartet mit ActionBarSherlock. Wenn ein Aktionselement vorhanden war, wurde die Breite des SearchView verringert, um Platz für die Aktionselemente zu schaffen.

UPDATE:

ich ein Problem in den Bug Tracker Android geschrieben haben: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

Wenn Sie das gleiche Problem haben, folgen Sie bitte dem Thema.

UPDATE:

Ich habe versucht, die Aktionselemente vor dem Search und auf diese Weise sie Elemente erscheinen zu setzen.

enter image description here

Aber die setSupportProgressBarIndeterminateVisibility (true) zeigt nach wie vor nicht den Fortschrittsbalken.

+1

Alter, Entschuldigung für eine Grammatik Nazi, aber es ist "Álbumes" –

+1

@LuisLavieri, Es ist nicht Spanisch, es ist Portugiesisch. –

+0

Mein schlechtes! Wow, es ist so ähnlich. –

Antwort

1

Haben Sie versucht, collapseActionView() zu verwenden?

ich es wie folgt verwendet werden:

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

Ich weiß nicht, ob es mit v7 funktioniert, aber es funktioniert sicherlich mit v4.

Versuchen Sie, 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

Danke für Ihre Antwort, aber der einzigartige Zweck meines Bildschirms ist das Suchen, also möchte ich, dass das SearchView die ganze Zeit sichtbar ist. Und mein Code funktionierte vor V7, das Problem liegt beim V7. Ich möchte nur eine Abhilfe für diesen Fehler haben, bis Google die nächste Version mit diesem Fehler veröffentlicht. –

+0

Ich verstehe nicht. Würdest du nicht lieber auf andere Symbole zugreifen, während du nicht suchst? Oder willst du es ständig erweitern? –

+0

Mit ActionBarSherlock, auch mit erweitertem SearchView, konnte ich auf die Aktionselemente zugreifen. Wie auch immer, wenn ich die Aktionselemente zuerst anführe, kann ich sie mit ActionBarCompat sehen. Mein Hauptproblem ist jetzt, dass der Fortschrittsbalken nicht mit ActionBarCompat angezeigt wird. Es wurde normalerweise mit dem ActionBarSherlock angezeigt. –

0

Entfernen Sie die Zeile

searchView.setIconifiedByDefault(false); 

Oder Sie können explizit die Methode mit true als Argument nennen.

+0

Wie ich bereits sagte, möchte ich, dass meine SearchView die ganze Zeit sichtbar ist. Also, Ihre Lösung wird nicht funktionieren. –

5

Dies ist definitiv ein Fehler über Android aber eine Behelfslösung kann programmatisch werden, einschließlich Suche wie folgt aus:

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

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

Sie können auch ein Layout XML verwenden Suche Eigenschaften zu definieren. Allerdings ist "iconifiedByDefault" in XML eher unwirksam in meiner Erfahrung. (Dies kann mein schlechtes aber sein)

Danke für das Erstellen eines Problems zu diesem Thema. Hier ist die URL des entsprechenden Berichts Fehler: https://code.google.com/p/android/issues/detail?id=58251

Trotz allem, was im Fehlerbericht erwähnt wird, ist meine Erfahrung die gleiche war sowohl mit ActionBarSherlock und ActionBarCompat. Also erwarte ich, dass auch ActionBarSherlock-Benutzer betroffen sind.

+0

Diese Workaround funktionierte wie ein Charme! – kgrevehagen

+0

Danke Mann! Es ist definitiv Fehler in "echten" ActionBar nicht nur ActionBarCompat. – headsvk