sólido solido por ocupa materia lugar liquido gaseoso está estados estado esta espacio constituido android actionbarsherlock android-actionbar android-actionbar-compat

android - solido - el sólido está constituido por materia



SearchView ocupando todo el espacio en el nuevo ActionBarCompat (3)

¿Has intentado usar collapseActionView() ?

Lo uso así:

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

No sé si funciona con v7, pero ciertamente funciona con v4.

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

Cambié de ActionBarSherlock a ActionBarCompat (biblioteca de soporte v7). Después de algunos ajustes, casi todo está funcionando bien por ahora.

Pero estoy en problemas con el SearchView en la barra de acción. Cuando se expande (en realidad, siempre se expande en mi actividad), ocupa todo el espacio y no respeta el espacio de otros elementos de acción que están configurados para mostrar siempre (showAsAction = "siempre").

Para simular el problema, usa esto:

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

En la Actividad:

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

Este es el resultado en el android 4.3:

Y este es el resultado en el android 2.3 (los elementos de acción ni siquiera aparecen):

El mismo problema ocurre cuando uso:

setSupportProgressBarIndeterminateVisibility(true);

El indicador de progreso aparece muy extraño en Android 4.3 y no aparece en Android 2.3.

El mismo código funcionó como se esperaba con ActionBarSherlock. Cuando había algún elemento de acción, SearchView se utilizaba para disminuir su ancho para dar espacio a los elementos de acción.

ACTUALIZAR:

He publicado un problema en el rastreador de errores de Android: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

Si tiene el mismo problema, siga el problema.

ACTUALIZAR:

He intentado colocar los elementos de acción antes de SearchView y de esta manera aparecen los elementos.

Pero, setSupportProgressBarIndeterminateVisibility (true) aún no muestra la barra de progreso.


Este es definitivamente un error acerca de Android, pero una solución puede incluir SearchView programáticamente de esta manera:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SearchView searchView = new SearchView(getSupportActionBar().getThemedContext()); searchView.setIconifiedByDefault(false); getActionBar().setCustomView(searchView); getActionBar().setDisplayShowCustomEnabled(true); }

También puede utilizar un diseño XML para definir las propiedades de SearchView. Sin embargo, "iconifiedByDefault" en XML tiende a ser ineficaz en mi experiencia. (Esto puede ser mi mal aunque)

Gracias por crear un problema sobre esto. Aquí está la URL del informe de error relacionado: https://code.google.com/p/android/issues/detail?id=58251

A pesar de lo que se menciona en el informe de errores, mi experiencia fue la misma con ActionBarSherlock y ActionBarCompat. Así que espero que los usuarios de ActionBarSherlock también se vean afectados.


Quitar la linea

searchView.setIconifiedByDefault(false);

O puede llamar explícitamente al método con true como argumento.