Как переместить значок поиска SearchView в правую сторону?
Вот мой макет, используя android.support.v7.widget.SearchView.
Я хочу переместить значок поиска в правую сторону, но я не нашел никакого метода...
'
<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>
`
После того, как я нажму на значок, он изменится на этот макет

8 ответов:
Вы можете сделать это программно
SearchView search = (SearchView) item.getActionView(); search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT));
<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>
Вы можете добавить действие поиска в меню.xml, как показано ниже:
<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>
Попробуйте this...It выглядит так, как вы и ожидали.Просто добавьте эту строку внутри тега SearchView.
Android: gravity= "right"
<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" />
Установка гравитации
Примечание 1: это решение не позволяло показывать заголовок, поэтому я добавилSearchViewвправо через xml или программно работает, но когдаSearchViewбыл расширен, то он занимал небольшую область ширины справа, которая не была запланированным видом, который я имел в виду, я хотел, чтобы он занял полную ширину.TextView, чтобы сохранить заголовок.Примечание 2: Когда
SearchViewбыл расширен, он накладывался на пользовательский заголовок, поэтому я сделал фонSearchViewв качестве панели инструментов, чтобы избегайте продолжайте скрывать / показывать заголовок с помощьюSearchView's expand/collapseВот код
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>Внутри действия я использовал прослушиватели Close и SearchClick, чтобы выровнять
SearchViewслева.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); } });
Вы можете попробовать layoutdirection. установите его в " rtl "
Android: layoutDirection= " rtl " в вашем searchview xml:
<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" />Не забудьте добавить это в тег приложения манифеста:
android:supportsRtl="true"
В случае, если вы хотите использовать
SearchViewвнеActionBarв любом другом представлении (скажем, напримерConstraintLayout), Вы можете использовать подход, опубликованный на этом сайте. В основном значок находится вImageView, расположенном в начале макета (или я мог бы сказать "это первый элемент, добавленный к его родителю" ). С помощью этого кода Вы ищете его, затем удаляете из родительского файла и, наконец, возвращаете обратно. Результат: он будет расположен в "конце" виджетаSearchView... проблема разрешенный...Испытано, работает, удовлетворено... ;)//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);
Вероятно, слишком поздно для ответа, но это сработало для меня, как вы можете видеть из прилагаемого скриншота .
<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>



Comments