Подтвердить что ты не робот

Как перемещать Поиск SearchView Icon вправо?

введите описание изображения здесь

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

`

после того, как я нажму значок, он изменится на этот макет введите описание изображения здесь

4b9b3361

Ответ 1

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

SearchView search = (SearchView) item.getActionView();
    search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT)); 

Ответ 2

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

Ответ 3

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

Ответ 4

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

Android: гравитация = "вправо"

<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" />

Ответ 5

Если вы хотите использовать 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);

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

Ответ 6

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

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

Примечание 2: Когда расширение SearchView было расширено, оно накладывалось бы на пользовательский заголовок, поэтому я создал фон SearchView в качестве панели инструментов, чтобы избежать скрытия/отображения заголовка с помощью SearchView 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);
        }
    });