android - tutorial - enfocar en ingles photoshop
Expandir y dar enfoque a SearchView automáticamente (14)
Estoy desarrollando una aplicación donde el usuario presiona el ícono "Buscar" en la ActionBar
y se hace visible un ActionBar
en la parte superior de la pantalla.
Mi problema es que SearchView
no está enfocado ni expandido, por lo que el usuario tiene que presionar el botón de búsqueda en la Searchview
de Searchview
para expandirlo y sacar el teclado.
¿Cómo se debe resolver esto?
Esto funcionó para mí:
En el diseño de la raíz:
xmlns:app="http://schemas.android.com/apk/res-auto"
SearchView definido de la siguiente manera:
<android.support.v7.widget.SearchView
android:id="@+id/search_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="15dp"
android:background="@drawable/search_view"
app:iconifiedByDefault="false"
app:queryHint="Search name or email"
>
<requestFocus />
</android.support.v7.widget.SearchView>
La diferencia es con la etiqueta de la aplicación.
app:iconifiedByDefault="false"
app:queryHint="Search name or email"
Esto funcionó para mí:
menu.expandActionView();
Estoy usando android.widget Searchview e iconificado de forma predeterminada. El código de abajo en xml me ayudó a expandirlo y a enfocarme automáticamente en la vista de búsqueda, cuando hice clic:
<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:queryHint="Search"/>
La respuesta de @ Pascalius funcionó para mí. Pero cada vez que cierras el SearchView y vuelves a hacer clic, pierdes el Focus. Así que setOnMenuItemClickListener
el código en un setOnMenuItemClickListener
así:
MenuItem item = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) item.getActionView();
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
searchView.setIconifiedByDefault(true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
return false;
}
});
Para hacer que SearchView se expanda de manera predeterminada, llame a setIconifiedByDefault(false)
cuando lo onCreateOptionsMenu(..)
p. Ej. En onCreateOptionsMenu(..)
o onPrepareOptionsMenu(..)
). He encontrado en la mayoría de los casos que esto le dará enfoque automáticamente, pero si no, simplemente llame requestFocus()
también.
Para la vista de búsqueda de Appcompat puedes usar este método:
MenuItemCompat.expandActionView(mSearchMenuItem);
Puede usar el método SearchView#setIconified()
en un identificador de SearchView en su código Java. Más aquí:
http://developer.android.com/reference/android/widget/SearchView.html#setIconified(boolean)
También puede hacer uso de SearchView#setIconifiedByDefault()
. Más información aquí:
http://developer.android.com/reference/android/widget/SearchView.html#setIconifiedByDefault(boolean)
SearchView de MenuItemCompat tiene una propiedad llamada maxWidth.
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setMaxWidth(xxx);
use ancho de pantalla en lugar de xxx curso
Si está utilizando dentro de una actividad que necesita usar
view.onActionViewExpanded();
si está utilizando opciones de menú dentro, debe usar
MenuItem.expandActionView();
Nota: solo funciona para SearchView
estas dos situaciones me funcionan.
Si lo está utilizando en el diseño, puede llamar
mSearchView.onActionViewExpanded()
Si quieres tenerlo iconifiedByDefault
, esto funcionó para mí. setFocusable
y setIconified
son necesarios.
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconifiedByDefault(true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
Actualización: si está utilizando android.support.v7.widget.SearchView
el comportamiento es muy diferente. clearFocus
es necesario si no desea que el teclado aparezca todo el tiempo. Por alguna razón, el menú se recrea todo el tiempo, cuando se utiliza appcompat.
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconified(false);
searchView.clearFocus();
También puede llamar al método expandActionView () para forzarlo:
@Override
public boolean onCreateOptionsMenu( Menu menu )
{
super.onCreateOptionsMenu( menu );
MenuItem searchMenuItem = menu.findItem( R.id.mi_search ); // get my MenuItem with placeholder submenu
searchMenuItem.expandActionView(); // Expand the search menu item in order to show by default the query
return true;
}
Elemento de búsqueda en el diseño de la barra de acciones:
<item
android:id="@+id/mi_search"
android:icon="@drawable/abs__ic_search_api_holo_light"
android:title="@string/search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="com.actionbarsherlock.widget.SearchView"
/>
utilizar esta
SearchManager searchManager = (SearchManager) mActivity.getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = new SearchView(mActivity.actionBar.getThemedContext());
searchView.setSearchableInfo(searchManager.getSearchableInfo(mActivity.getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setQueryHint("Search");
menu.findItem(R.id.action_search).setActionView(searchView);
android:iconifiedByDefault="true"
en tu archivo xml