2016-04-28 109 views
13

enter image description here如何將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> 

`

後,我單擊該圖標,它會改變這一佈局 enter image description here

回答

15

你可以做到這一點編程

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

thx!它完美的作品,它不會涵蓋我的標題! – meunicorn

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

謝謝!它工作得很好! – meunicorn

1

嘗試......看起來,你expect.Just添加搜索查看標籤內這條線。

安卓重力= 「右」

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

+3

感謝您的回答,但它不起作用 – meunicorn

+0

發佈您的完整代碼。因爲我已經測試過你的片段。它很有用。 –

9

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

0

在你想在任何其他視圖中使用SearchView以外的ActionBar情況下(讓我們說,例如ConstraintLayout),可以使用貼在this網站的方法。基本上該圖標位於佈局開始處的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

SearchView重力設置爲通過XML的權利或以編程方式工作,但當SearchView展開時,它是在右邊的一個小區域的寬度,這不是我想要的預期外觀,我希望它採取全寬。

注1:該解決方案不允許標題顯示,因此我添加了TextView來保存標題。

注2:當SearchView擴大,它會在自定義標題重疊,所以我做了SearchView背景的工具欄,以避免繼續隱藏/顯示標題與SearchView的展開/摺疊

這裏是Toolbar代碼:

​​

活動裏面,我所用的關閉和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); 
     } 
    });