解決toolbar中searchview不能改變圖標(biāo)

最近在用toolbar心剥,然后在使用searchview搜索的時(shí)候膳灶,遇到一個(gè)問(wèn)題涝开,無(wú)論如何影斑,那個(gè)toolbar中通過(guò)menu還是不能修改searchview的圖標(biāo)和其他一些顏色屬性的。

如圖:


這個(gè)icon修改不了


字體也是黑色的初婆,還有那個(gè)X刪除圖標(biāo)

解決方法:

//通過(guò)找到search view里面的一個(gè)叫做appcompatImageViewbutton來(lái)修改圖標(biāo)和顏色

AppCompatImageViewbutton=(AppCompatImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_button);

button.setImageResource(R.mipmap.ic_search);

//搜索的那個(gè)X的刪除圖標(biāo)也是可以通過(guò)這種方式來(lái)修改的

//下面是在搜索欄的字體蓬坡,設(shè)置為白色,默認(rèn)也是黑色

TextViewtextView=(TextView)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);

textView.setTextColor(Color.WHITE);


解決思路:

如果你看到上面的解決方法已經(jīng)解決了問(wèn)題磅叛,那就祝賀你屑咳。如果有興趣的話可以看看這里的解決思路,它可以幫助你在以后遇到其他問(wèn)題的時(shí)候弊琴,根據(jù)相同的思路來(lái)思考解決問(wèn)題

這個(gè)問(wèn)題肯定大家也會(huì)遇到兆龙,因?yàn)槲以诰W(wǎng)上搜解決方法的時(shí)候也看到了許多的問(wèn)題貼,甚至是stackoverflow上面也搜過(guò)敲董,也有一些解決方案紫皇。

最多的三種:

第一種

int search_mag_icon_id = mSearchView.getContext().getResources().getIdentifier("android:id/search_mag_icon", null, null);

ImageView mSearchViewIcon = (ImageView) mSearchView.findViewById(search_mag_icon_id);// 獲取搜索圖標(biāo)

mSearchViewIcon.setImageResource(R.drawable.ic_menu_search_holo_dark);

mSearchView.setIconifiedByDefault(false);(設(shè)置搜索圖標(biāo)在編輯框外慰安,ture時(shí)在框內(nèi))。

用此方法修改時(shí)成功了聪铺,但是只要一設(shè)置mSearchView.setIconifiedByDefault(true)化焕,搜索圖標(biāo)就右成了系統(tǒng)的圖標(biāo)。

第二種


通過(guò)修改主題樣式

第三種


重寫一個(gè)style


然后設(shè)置toolbar theme樣式(API21以上)



第一種方法我試過(guò)铃剔,不行撒桨,會(huì)報(bào)空指針,因?yàn)橥ㄟ^(guò)identifier("")來(lái)找到對(duì)應(yīng)的id键兜,我調(diào)試過(guò)凤类,id能夠找到,但是不確定是不是對(duì)的蝶押,不過(guò)你還是不能通過(guò)searchview.findviewbyid 來(lái)找到所謂的imageview textview什么的踱蠢,空指針。

當(dāng)時(shí)我就照著這種思路棋电,然后在調(diào)試的時(shí)候去看了searchview的mChildern茎截、mChildren的mChildren,子孫都去找了,然后看了一下他們的id好像已經(jīng)不是所謂的android:id/search_mag_icon 了赶盔,而是app:id/search_mag_icon, 不信你可以看看

但是企锌,即便是改成后面那個(gè)也不行,還是找不到于未,依舊空指針撕攒,我也不知道怎么回事了。

第二種我也試過(guò)烘浦,對(duì)于我而言不行抖坪。大家都知道現(xiàn)在基本很多都是用appcompatActivity了,所以現(xiàn)在所用的主題一般也都是appcompat相關(guān)的主題了闷叉。沒有誰(shuí)還在用老主題的擦俐。

即便你還在用老主題,但是握侧,它也只是根據(jù)老主題的兩種 holo.light 蚯瞧、dark來(lái)改變searchview 那個(gè)搜索圖標(biāo)的顏色,白色品擎、黑色埋合,但是根本滿足不了我們的要求。

還有萄传,如果要用這種修改主題的方式的話甚颂,就必須使用actionbar,但是你知道現(xiàn)在我們都是用toolbar來(lái)替換actionbar,這個(gè)沒話說(shuō),如果在activity中直接使用setActionbar就可以了振诬。

但是瓣铣,我們?cè)趂ragment里面使用toolbar呢?那就不行了贷揽,因?yàn)槎鄶?shù)情況下,我們的主題都是 noActionbar的梦碗,因?yàn)槲覀円远xtoolbar呀禽绪。而且對(duì)于現(xiàn)在這種 一個(gè)activity下面裝多個(gè)fragment來(lái)實(shí)現(xiàn)那種底部導(dǎo)航的潮流結(jié)構(gòu)中,一般我們的每個(gè)fragment的toolbar都是不一樣的洪规,所以不可能用一個(gè)activity的toolbar來(lái)動(dòng)態(tài)切換或者改變印屁,那樣太復(fù)雜了。

第三種斩例,親測(cè)過(guò)雄人,也是沒有什么用,因?yàn)槠鋵?shí)他修改的是toolbar的字體顏色念赶,還有一些默認(rèn)圖標(biāo)的顏色础钠,但是它不可以修改,searchview展開之后的搜索的框中的字體顏色

所以的所以叉谜,總而又言之就是旗吁,上述三種親測(cè),不適用停局。

解決核心思路:

重點(diǎn)來(lái)了很钓,既然主題什么的不行,那我們可以依照第一種方法的思路來(lái)?yè)Q個(gè)角度試試董栽。

很多時(shí)候你會(huì)發(fā)現(xiàn)码倦,官方的一些組件,里面有很多成員變量或者里面有很多子view锭碳,但是只暴露出很少的方法去讓你修改一些屬性袁稽。很多是private的方法,這時(shí)候你會(huì)想如果是public該多好啊工禾。

所以运提,你就會(huì)想要去繼承重寫什么的,但是那樣我覺得有點(diǎn)麻煩闻葵。

于是民泵,我就想,你看槽畔,如果找到里面的子view,那不就可以通過(guò)子view來(lái)修改里面的內(nèi)容了啊栈妆。比如,searchview里面的那個(gè)放大鏡的那個(gè)圖標(biāo),肯定應(yīng)該是一個(gè)imageview吧鳞尔,如果我們能通過(guò)什么方式找出來(lái)嬉橙,那么就可以修改了嘛。

很常見的就是通過(guò)findviewbyId寥假,所以就去找ID吧市框。

那么現(xiàn)在就要去看看源碼了,看了searchview的源碼糕韧。


上面3個(gè)依次就是輸入的字體顏色枫振、放大鏡圖標(biāo)、關(guān)閉圖標(biāo)

id的名字你也看見了萤彩,不過(guò)它們沒有在自己的工程里粪滤,它是在support.v7里面的。

于是去里面找雀扶,找android.support.v7.appcompat.R.id.search_button就能找到了杖小,

基本就大功告成了,然后你就通過(guò)search findviewbyid 找出來(lái)愚墓,然后就可以隨意設(shè)置了予权,真爽!浪册!

其他的一些子view也是一樣伟件,都可以找出來(lái)然后自己隨意改!

好爽议经!總結(jié)一下:

如果一個(gè)組件是很多子view混合構(gòu)成的斧账,你就可以通過(guò)找到子view,然后去修改子view,就能達(dá)到修改組件的效果了煞肾。

希望對(duì)大家有用咧织,謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市籍救,隨后出現(xiàn)的幾起案子习绢,更是在濱河造成了極大的恐慌,老刑警劉巖蝙昙,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闪萄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡奇颠,警方通過(guò)查閱死者的電腦和手機(jī)败去,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烈拒,“玉大人圆裕,你說(shuō)我怎么就攤上這事广鳍。” “怎么了吓妆?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵赊时,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我行拢,道長(zhǎng)祖秒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任舟奠,我火速辦了婚禮狈涮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸭栖。我一直安慰自己,他們只是感情好握巢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布晕鹊。 她就那樣靜靜地躺著,像睡著了一般暴浦。 火紅的嫁衣襯著肌膚如雪溅话。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天歌焦,我揣著相機(jī)與錄音飞几,去河邊找鬼。 笑死独撇,一個(gè)胖子當(dāng)著我的面吹牛屑墨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纷铣,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼卵史,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了搜立?” 一聲冷哼從身側(cè)響起以躯,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啄踊,沒想到半個(gè)月后忧设,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颠通,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年址晕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顿锰。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斩箫,死狀恐怖吏砂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乘客,我是刑警寧澤狐血,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站易核,受9級(jí)特大地震影響匈织,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牡直,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一缀匕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碰逸,春花似錦乡小、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至胳喷,卻和暖如春湃番,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吭露。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工吠撮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讲竿。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓泥兰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親题禀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逾条,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容