簡體   English   中英

如何將 SearchView 的搜索圖標移動到右側?

[英]How to move SearchView 's search Icon to the right side?

在此處輸入圖片說明

這是我的布局,使用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>

`

單擊該圖標后,它將更改為此布局在此處輸入圖片說明

你可以試試layoutdirection。 將其設置為“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"

您可以以編程方式進行

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

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

正常外觀 折疊外觀

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

如果您想在任何其他視圖中使用ActionBar之外的SearchView (例如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);

測試,工作,滿意...... ;)

通過 xml 或以編程方式將SearchView重力設置為右側,但是當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);
        }
    });

答案可能為時已晚,但這對我有用,正如您從附加的屏幕截圖中看到的那樣。

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

android:layoutDirection="rtl"這對我android:layoutDirection="rtl"

試試這個...它看起來如你所料。只需在 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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM