it-swarm.com.ru

Как переместить значок поиска SearchView на правую сторону?

 enter image description here

Вот мой макет с использованием 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>

`

после того, как я нажму на значок, он изменится на этот макет  enter image description here

16
meunicorn

Вы можете сделать это программно

SearchView search = (SearchView) item.getActionView();
    search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT)); 
18
Aditya Vyas-Lakhan

Вы можете добавить действие поиска в menu.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>

Normal look Collapsed look

11
emotionfxxk
<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>
9
Mohd Asif Ahmed

Установка гравитации SearchView вправо с помощью xml или программно работает, но когда SearchView была расширена, тогда она занимала небольшую область ширины справа, которая не была предполагаемым взглядом, который я имел в виду, я хотела, чтобы он взял полный ширина.

Примечание 1. Это решение не позволяет отображать заголовок, поэтому я добавил TextView для хранения заголовка.

Примечание 2: Когда SearchView был расширен, он перекрывался с пользовательским заголовком, поэтому я сделал фон SearchView в качестве панели инструментов, чтобы избежать скрытия/отображения заголовка с расширением/свертыванием SearchView

Вот код 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);
        }
    });
1
user3814327

вы могли бы попробовать направление макета. установите его на "RTL"

Android: layoutDirection = "rtl" в вашем поисковике 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"
1
j2emanue

Попробуйте это ... Это выглядит так, как вы ожидаете. Просто добавьте эту строку внутри тега SearchView.

Android: gravity = "вправо"

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

Возможно, слишком поздно для ответа, но это сработало для меня, как вы можете видеть из скриншота прилагается.

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

Если вы хотите использовать SearchView вне ActionBar в любом другом представлении (скажем, например, ConstraintLayout), вы можете использовать подход, размещенный на this site. По сути, значок находится в 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);

Проверено, работает, доволен ...;)

0
Geryson