Android SearchView修改字体颜色

本文介绍了如何在不使用反射的情况下,通过分析SearchView源码和样式,改变其hint的颜色。主要步骤包括检查style.xml,追踪SearchViewStyle,尝试修改textAppearance属性,最后发现需要修改SearchAutoComplete(AutoCompleteTextView子类)的样式来达到目的。
摘要由CSDN通过智能技术生成

SearchView的hint颜色怎么改呢,SearchView并没有提供相关属性。在网上找到的方法基本都是通过反射实现的。但本人不是很喜欢用反射,难道就不能通过样式修改,决定还是看看源码。下面是看了源码之后发现的方法。

注意我用的是v7包的SearchView。

style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- ...  -->
</style>

查看Theme.AppCompat.Light.NoActionBar样式,最终找到Base.V7.Theme.AppCompat.Light的SearchViewStyle

<style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
<!-- ...  -->
<item name="searchViewStyle">@style/Widget.AppCompat.Light.SearchView</item>
<!-- ...  -->
</style>

看看SearchViewStyle

<style name="Base.Widget.AppCompat.SearchView" parent="android:Widget">
        <item name="layout">@layout/abc_search_view</item>
        <item name="queryBackground">@drawable/abc_textfield_search_material</item>
        <item name="submitBackground">@drawable/abc_textfield_search_material</item>
        <item name="closeIcon">@drawable/abc_ic_clear_material</item>
        <item name="searchIcon">@drawable/abc_ic_search_api_material</item>
        <item name="searchHintIcon">@drawable/abc_ic_search_api_material</item>
        <item name="goIcon">@drawable/abc_ic_go_search_api_material</item>
        <item name="voiceIcon">@drawable/abc_ic_voice_search_api_material</item>
        <item name="commitIcon">@drawable/abc_ic_commit_search_api_mtrl_alpha</item>
        <item name="suggestionRowLayout">@layout/abc_search_dropdown_item_icons_2line</item>
</style>

没有发现text相关属性,看看父样式有没有

<style name="Widget">
        <item name="textAppearance">?textAppearance</item>
</style>

哈哈,这不是有么,那直接改textAppearance不就可以了吗,怀着激动的心情唰唰的撸起来。结果发现没什么用。为什么啊???
不要激动,有没有注意到layout这个属性。点进去看下吧,这其实searchView的布局文件


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值