studio mauker materialsearchview example bar arsenal android android-layout material-design searchview

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>

`

Después de hacer clic en el icono, cambiará a este diseño.


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>