解决toolbar中searchview不能改变图标

最近在用toolbar,然后在使用searchview搜索的时候,遇到一个问题,无论如何,那个toolbar中通过menu还是不能修改searchview的图标和其他一些颜色属性的。

如图:


这个icon修改不了


字体也是黑色的,还有那个X删除图标

解决方法:

//通过找到search view里面的一个叫做appcompatImageViewbutton来修改图标和颜色

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

button.setImageResource(R.mipmap.ic_search);

//搜索的那个X的删除图标也是可以通过这种方式来修改的

//下面是在搜索栏的字体,设置为白色,默认也是黑色

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

textView.setTextColor(Color.WHITE);


解决思路:

如果你看到上面的解决方法已经解决了问题,那就祝贺你。如果有兴趣的话可以看看这里的解决思路,它可以帮助你在以后遇到其他问题的时候,根据相同的思路来思考解决问题

这个问题肯定大家也会遇到,因为我在网上搜解决方法的时候也看到了许多的问题贴,甚至是stackoverflow上面也搜过,也有一些解决方案。

最多的三种:

第一种

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);// 获取搜索图标

mSearchViewIcon.setImageResource(R.drawable.ic_menu_search_holo_dark);

mSearchView.setIconifiedByDefault(false);(设置搜索图标在编辑框外,ture时在框内)。

用此方法修改时成功了,但是只要一设置mSearchView.setIconifiedByDefault(true),搜索图标就右成了系统的图标。

第二种


通过修改主题样式

第三种


重写一个style


然后设置toolbar theme样式(API21以上)



第一种方法我试过,不行,会报空指针,因为通过identifier("")来找到对应的id,我调试过,id能够找到,但是不确定是不是对的,不过你还是不能通过searchview.findviewbyid 来找到所谓的imageview textview什么的,空指针。

当时我就照着这种思路,然后在调试的时候去看了searchview的mChildern、mChildren的mChildren,子孙都去找了,然后看了一下他们的id好像已经不是所谓的android:id/search_mag_icon 了,而是app:id/search_mag_icon, 不信你可以看看

但是,即便是改成后面那个也不行,还是找不到,依旧空指针,我也不知道怎么回事了。

第二种我也试过,对于我而言不行。大家都知道现在基本很多都是用appcompatActivity了,所以现在所用的主题一般也都是appcompat相关的主题了。没有谁还在用老主题的。

即便你还在用老主题,但是,它也只是根据老主题的两种 holo.light 、dark来改变searchview 那个搜索图标的颜色,白色、黑色,但是根本满足不了我们的要求。

还有,如果要用这种修改主题的方式的话,就必须使用actionbar,但是你知道现在我们都是用toolbar来替换actionbar,这个没话说,如果在activity中直接使用setActionbar就可以了。

但是,我们在fragment里面使用toolbar呢?那就不行了,因为多数情况下,我们的主题都是 noActionbar的,因为我们要自定义toolbar呀。而且对于现在这种 一个activity下面装多个fragment来实现那种底部导航的潮流结构中,一般我们的每个fragment的toolbar都是不一样的,所以不可能用一个activity的toolbar来动态切换或者改变,那样太复杂了。

第三种,亲测过,也是没有什么用,因为其实他修改的是toolbar的字体颜色,还有一些默认图标的颜色,但是它不可以修改,searchview展开之后的搜索的框中的字体颜色

所以的所以,总而又言之就是,上述三种亲测,不适用。

解决核心思路:

重点来了,既然主题什么的不行,那我们可以依照第一种方法的思路来换个角度试试。

很多时候你会发现,官方的一些组件,里面有很多成员变量或者里面有很多子view,但是只暴露出很少的方法去让你修改一些属性。很多是private的方法,这时候你会想如果是public该多好啊。

所以,你就会想要去继承重写什么的,但是那样我觉得有点麻烦。

于是,我就想,你看,如果找到里面的子view,那不就可以通过子view来修改里面的内容了啊。比如,searchview里面的那个放大镜的那个图标,肯定应该是一个imageview吧,如果我们能通过什么方式找出来,那么就可以修改了嘛。

很常见的就是通过findviewbyId,所以就去找ID吧。

那么现在就要去看看源码了,看了searchview的源码。


上面3个依次就是输入的字体颜色、放大镜图标、关闭图标

id的名字你也看见了,不过它们没有在自己的工程里,它是在support.v7里面的。

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

基本就大功告成了,然后你就通过search findviewbyid 找出来,然后就可以随意设置了,真爽!!

其他的一些子view也是一样,都可以找出来然后自己随意改!

好爽!总结一下:

如果一个组件是很多子view混合构成的,你就可以通过找到子view,然后去修改子view,就能达到修改组件的效果了。

希望对大家有用,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容