如何将SearchView的搜索图标移到右侧?

时间:2016-04-28 04:05:05

标签: android android-layout material-design 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

9 个答案:

答案 0 :(得分:19)

您可以通过编程方式执行此操作

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

答案 1 :(得分:11)

您可以在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

答案 2 :(得分:9)

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

答案 3 :(得分:1)

试试这个...它看起来像你期望的那样。只需在SearchView标签内添加这一行。

<强>机器人:比重= “右”

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

答案 4 :(得分:1)

通过xml将SearchView重力设置为右侧或以编程方式设置有效但是当SearchView展开时,它占据了右边宽度的一小块区域,这不是预期的看起来我记得,我希望它采取全宽。

注意1:此解决方案不允许显示标题,因此我添加了TextView来保存标题。

注意2:展开SearchView时,它会在自定义标题上重叠,因此我将SearchView背景设置为工具栏,以避免隐藏/显示标题{{ 1}}&#39; s展开/折叠

以下是SearchView代码:

Toolbar

在活动中,我使用Close和SearchClick侦听器将 <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> 对齐到左侧。

SearchView

答案 5 :(得分:1)

您可以尝试layoutdirection。将其设置为“ rtl”

您的searchview xml中的

android:layoutDirection =“ rtl”:

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

答案 6 :(得分:1)

android:layoutDirection="rtl"对我有用。

答案 7 :(得分:0)

如果您想在任何其他视图中使用SearchView之外的ActionBar(例如ConstraintLayout),您可以使用{{3}上发布的方法网站。基本上,图标位于布局开头的ImageView中(或者我可以说&#34;它是添加到其父级的第一个元素&#34; )。使用此代码,您正在搜索它,然后将其从父代中删除,最后将其放回原处。结果是:它将定位在&#34; end&#34; 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);

经过测试,工作,满意......;)

答案 8 :(得分:0)

答案可能为时已晚,但这对我有用,如附件screenshot所示。

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