2012-07-17 68 views
33

一個搜索查看我有一個像這樣在我的操作欄搜索插件:的樣式在Android操作欄,

Search Widget in Action Bar

(1)如何更改,上面寫着「iPhone」文本的顏色? (2)此外,如果您注意到灰色X - 整個搜索窗口小部件都是該顏色,並且它位於圖標位置。我在Holo.Theme.Light上使用我自己的MOD。

如何在我的styles.xml文件中更改這兩個窗口小部件的樣式(假設這是您對搜索窗口小部件進行更改的位置)?

+0

1.圖標位置*的含義是什麼? 2.你真的想在(2)中改變什麼? X的顏色?下劃線的顏色?都? – vArDo 2012-07-26 15:27:07

+0

嘿,這是舊的,我解決了 - 有點。我把答案放在下面。我主要想改變文本和X的顏色。在圖標位置只是操作欄中的放大鏡。你點擊它,它就像你在上面看到的那樣打開。 – KickingLettuce 2012-07-26 16:04:09

+0

http://stackoverflow.com/posts/12942258/edit這是一個骯髒的黑客,但它的工作 – Pongpat 2012-10-17 20:03:59

回答

9

你將不得不設置

searchView.setBackgroundColor(Color.WHITE); 

SearchViews不那麼定製。

+0

非常有趣,需要試試這個。幾周前我曾用解決方法解決了這個問題......但這非常好。給予好評。 – KickingLettuce 2012-12-17 19:19:15

3

我解決這個問題的方式是使用Holo.Light.DarkActionBar主題。我不相信你可以輕易地改變搜索部件。

+3

實際上,你可以在'SearchView'中設置'EditText'的文字顏色。但是,正如你所提到的,這不像使用XML風格定義那麼簡單。你甚至可以設置下劃線的顏色。查看[我的回答](http://stackoverflow.com/questions/11085308/changing-the-background-drawable-of-the-searchview-widget)到其他關於'SearchView'自定義。 – vArDo 2012-07-26 16:11:44

+1

這是我認爲這樣做的最好方法。 – 2014-06-30 16:09:36

13

您可以更改searchview的樣式。下面是一些代碼我用來調整的EditText上,聲音圖標...

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

     int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 
     searchView.findViewById(searchPlateId).setBackgroundResource(R.drawable.textfield_search_selected); 

     int voiceSearchPlateId = searchView.getContext().getResources().getIdentifier("android:id/submit_area", null, null); 
     searchView.findViewById(voiceSearchPlateId).setBackgroundResource(R.drawable.textfield_search_right_selected); 

     // change hint color 
     int searchTextViewId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
     TextView searchTextView = (TextView) searchView.findViewById(searchTextViewId); 
     searchTextView.setHintTextColor(getResources().getColor(R.color.light_grey)); 

[編輯]一個更完整的答案可以在這裏找到:Changing the background drawable of the searchview widget

+0

如何找到這些ID?我想將放大鏡圖標和「x」更改爲深色。 – Vituel 2014-01-03 13:58:23

+0

+1。這幫助了我。但是,不要使用getIdentifier,你可以在ABS的情況下使用ID。 'searchView.findViewById(R.id.abs__search_plate).setBackgroundResource(R.drawable.myBackground);'同樣可以用於提交區域和搜索src文本 – 2014-04-18 15:30:31

15

如果您在使用程序兼容性庫,那麼解決方案與Jerome的答案有點不同。這裏是我的解決方案

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    restoreActionBar(); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 
    searchAutoComplete.setHintTextColor(Color.WHITE); 
    searchAutoComplete.setTextColor(Color.WHITE); 

    View searchplate = (View)searchView.findViewById(android.support.v7.appcompat.R.id.search_plate); 
    searchplate.setBackgroundResource(R.drawable.texfield_searchview_holo_light); 

    ImageView searchCloseIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); 
    searchCloseIcon.setImageResource(R.drawable.clear_search); 

    ImageView voiceIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_voice_btn); 
    voiceIcon.setImageResource(R.drawable.abc_ic_voice_search); 

    ImageView searchIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); 
    searchIcon.setImageResource(R.drawable.abc_ic_search); 


    return super.onCreateOptionsMenu(menu); 
} 
+1

我們很懶,不喜歡以下鏈接。請在答案中包含解決方案,而不僅僅是一個鏈接。 – mhlester 2014-01-22 18:55:00

+0

根據你的要求,我已經在這裏更新了我的答案...... – 2014-01-23 08:19:48

+0

這大部分來自appcompat中的abc_search_view.xml文件。希望有人對此有所幫助。 – LEO 2014-05-21 20:41:14

49

我已經花費許多時間這一點,但最後::-)

1)要更改文本顏色:

((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)).setTextColor(Color.WHITE); 

2)要更改文本提示:

((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(Color.WHITE); 
+0

我愛你的男人。 – 2017-11-11 13:06:51

0

如果你想要白色文本,你應該擴展一個黑色背景的動作欄主題,如Holo.ThemeTheme.AppCompat.Light.DarkActionBar如果您使用支持庫。
無需其他設置。

2

onCreateOptionsMenu :

int id = searchView.getContext() 
        .getResources() 
        .getIdentifier("android:id/search_src_text", null, null); 
    TextView textView = (TextView) searchView.findViewById(id); 
    textView.setTextColor(Color.WHITE); 
+0

謝謝,牛軋糖工作 – Herman 2017-01-04 20:21:25

0
@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     super.onCreateOptionsMenu(menu); 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 

     // Associate search configuration with the SearchView 
     SearchManager searchManager = 
       (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = 
       (SearchView) menu.findItem(R.id.search).getActionView(); 
     searchView.setQueryHint("Client/DOB/PPSN"); 
     searchView.setSearchableInfo(
       searchManager.getSearchableInfo(getComponentName())); 

     // Setting the textview default behaviour properties 
     int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
     TextView textView = (TextView) searchView.findViewById(id); 
     textView.setTextColor(Color.WHITE); 
     textView.setHintTextColor(Color.WHITE); 

     // Set the search plate color to white 
     int linlayId = getResources().getIdentifier("android:id/search_plate", null, null); 
     View view = searchView.findViewById(linlayId); 
     Drawable drawColor = getResources().getDrawable(R.drawable.searchcolor); 
     view.setBackground(drawColor); 
     return super.onCreateOptionsMenu(menu); 

    } 

現在,這是改變搜索欄

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape > 
      <solid android:color="#ffffff" /> 
     </shape> 
    </item> 

    <!-- main color --> 
    <item android:bottom="1.5dp" 
     android:left="1.5dp" 
     android:right="1.5dp"> 
     <shape > 
      <solid android:color="#2c4d8e" /> 
     </shape> 
    </item> 

    <!-- draw another block to cut-off the left and right bars --> 
    <item android:bottom="10.0dp"> 
     <shape > 
      <solid android:color="#2c4d8e" /> 
     </shape> 
    </item> 
</layer-list> 

和菜單/菜單的彩鋼板xml文件searchcolor.xml。XML創建行動吧

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/search" 
      android:icon="@drawable/search" 
      android:showAsAction="ifRoom" 
      android:actionViewClass="android.widget.SearchView" /> 

</menu> 
7

棒棒糖,你可以喜歡這種風格的搜索視圖從博客文章 http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

values/themes.xml: 
<style name=」Theme.MyTheme」 parent=」Theme.AppCompat」> 
    <item name=」searchViewStyle」>@style/MySearchViewStyle</item> 
</style> 
<style name=」MySearchViewStyle」 parent=」Widget.AppCompat.SearchView」> 
    <!-- Background for the search query section (e.g. EditText) --> 
    <item name="queryBackground">...</item> 
    <!-- Background for the actions section (e.g. voice, submit) --> 
    <item name="submitBackground">...</item> 
    <!-- Close button icon --> 
    <item name="closeIcon">...</item> 
    <!-- Search button icon --> 
    <item name="searchIcon">...</item> 
    <!-- Go/commit button icon --> 
    <item name="goIcon">...</item> 
    <!-- Voice search button icon --> 
    <item name="voiceIcon">...</item> 
    <!-- Commit icon shown in the query suggestion row --> 
    <item name="commitIcon">...</item> 
    <!-- Layout for query suggestion rows --> 
    <item name="suggestionRowLayout">...</item> 
</style> 
+0

有沒有一種方法來使用搜索視圖前棒棒糖造型?比如像KitKat? – 2016-08-04 17:07:59

0

在xxxActivity.java文件,然後獲取搜索查看搜索:

SearchView searchView = (SearchView)menu.findItem(R.id.my_search_view).getActionView(); 
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 

// Getting the 'search_plate' LinearLayout. 
View searchPlate = searchView.findViewById(searchPlateId); 
searchPlate.setBackgroundResource(R.drawable.textfield_searchview); 

創建文件res/drawable/texfield_searchview.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" 
     android:drawable="@drawable/textfield_search_selected_holo_light" /> 
    <item android:drawable="@drawable/textfield_search_default_holo_light" /> 
</selector> 
3
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search)); 
searchView.setSubmitButtonEnabled(true); // to enable submit button 

ImageView b = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_go_btn); 
b.setImageResource(android.R.drawable.ic_menu_search); //to change submit button icon 

TextView a=(TextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 
a.setTextColor(...); //to change color of search text