mauker - searchview android example listview
¿Cómo mover el ícono de búsqueda de SearchView al lado derecho? (8)
En caso de que desee utilizar SearchView
fuera de ActionBar
en cualquier otra vista (digamos, por ejemplo, ConstraintLayout
), puede utilizar el enfoque publicado en this sitio. Básicamente, el icono está en un ImageView
colocado al inicio del diseño (o podría decir "es el primer elemento agregado a su elemento primario" ). Con este código, lo está buscando, luego lo elimina del padre y finalmente lo devuelve. El resultado: se colocará en el "final" del widget SearchView
... problema resuelto ...
//Get ImageView of icon
ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
//Get parent of gathered icon
ViewGroup linearLayoutSearchView = (ViewGroup) searchViewIcon.getParent();
//Remove it from the left...
linearLayoutSearchView.removeView(searchViewIcon);
//then put it back (to the right by default)
linearLayoutSearchView.addView(searchViewIcon);
Probado, trabajando, satisfecho ...;)
Aquí está mi diseño, usando android.support.v7.widget.SearchView
. Quiero mover el icono de búsqueda al lado derecho, pero no he encontrado ningún método ...
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/AppTheme.PopupOverlay">
<android.support.v7.widget.SearchView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tab_main_title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
`
Establecer la gravedad de SearchView
a la derecha a través de xml o funciona mediante programación, pero cuando se expandió SearchView
, se tomó un área pequeña del ancho de la derecha, que no era el aspecto deseado que tenía en mente, quería que se aprovechara al máximo. anchura.
Nota 1: esta solución no permitió que se mostrara el título, así que agregué un TextView
para mantener el título.
Nota 2: Cuando se expandió SearchView
, se superponía con el título personalizado, de modo que hice el fondo de SearchView
como la barra de herramientas para evitar ocultar / mostrar el título con expand / collapse de SearchView
Aquí está el código de la Toolbar
:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<TextView
android:id="@+id/toolbar_title"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="Toolbar Title"
android:textColor="@android:color/white" />
<android.support.v7.widget.SearchView
android:id="@+id/search_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="?attr/colorPrimary"
android:gravity="right" />
</RelativeLayout>
</android.support.v7.widget.Toolbar>
Dentro de la actividad, utilicé los escuchas Close y SearchClick para alinear SearchView
a la izquierda.
mSearchView = findViewById(R.id.search_view);
mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) mSearchView.getLayoutParams();
param.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
//set layout params to cause layout update
mSearchView.setLayoutParams(param);
return false;
}
});
mSearchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) mSearchView.getLayoutParams();
param.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
//set layout params to cause layout update
mSearchView.setLayoutParams(param);
}
});
Intente esto ... Parece que espera. Solo agregue esta línea dentro de la etiqueta SearchView.
Android: gravedad = "derecha"
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/AppTheme.PopupOverlay">
<android.support.v7.widget.SearchView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right" />
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tab_main_title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Probablemente demasiado tarde para la respuesta, pero esto funcionó para mí, como se puede ver en la screenshot adjunta.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_constraintBottom_toTopOf="@+id/relativeLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="Contacts">
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:gravity="center_vertical"
app:queryHint="Search" />
</android.support.v7.widget.Toolbar>
Puede agregar acción de búsqueda en menu.xml como a continuación:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/action_search"
android:icon="@mipmap/ic_search_white_24dp"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
<item android:id="@+id/action_download"
android:title="@string/menu_action_download"
android:icon="@mipmap/ic_file_download_white_24dp"
android:orderInCategory="100"
app:showAsAction="always" />
</menu>
Puedes hacerlo programáticamente
SearchView search = (SearchView) item.getActionView();
search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT));
Usted podría intentar la dirección de diseño. ponlo en "rtl"
android: layoutDirection = "rtl" en su xml de viewview de búsqueda:
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="11.4dp"
app:iconifiedByDefault="true"
android:animateLayoutChanges="true"
app:queryHint="@string/search_hint"
app:queryBackground="@android:color/transparent"
app:searchHintIcon="@drawable/empty_drawable"
app:closeIcon="@drawable/close_x_icon"
**android:layoutDirection="rtl"**
app:searchIcon="@drawable/magnifying_glass"
/>
No olvides poner esto en tu etiqueta de aplicación de manifiesto:
android:supportsRtl="true"
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/AppTheme.PopupOverlay">
<RelativeLayout
android:id="@+id/not"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<android.support.v7.widget.SearchView
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tab_main_title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>