Android 浏览器设置中的搜索引擎

更改浏览器设置中的搜索引擎 
1. 需求 
将浏览器设置中的搜索引擎更改为XXXX,  谷歌搜索,百度搜索。默认 XXXX 选中。 
2. 分析源码 
我们先找到浏览器的设置界面代码, com.android.browser.BrowserPreferencesPage.java  构造界面部分代码在 onCreate 函数中 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

// Load the XML preferences file 
addPreferencesFromResource(R.xml.browser_preferences); 
这里我们看到它是通过xml 配置文件来构造界面的,这个文件存放在工程下的 res/xml/browser_preferences.xml 。里面对于 search engine 是这样定义的: 
<com.android.browser.search.SearchEnginePreference 
android:key="search_engine" 
android:title="@string/pref_content_search_engine" 
android:defaultValue="google" 
android:summary="@string/pref_content_search_engine_summary" 
android:dialogTitle="@string/pref_content_search_engine" /> 
我们继续顺藤摸瓜,找到SearchEnginePreference.java  这里面对于 search engin 又是通过 SearchEngines 类静态方法 getSearchEngineInfos 来获取的,这个方法实现如下代码: 
public static List<SearchEngineInfo> getSearchEngineInfos(Context context) { 
ArrayList<SearchEngineInfo> searchEngineInfos = new ArrayList<SearchEngineInfo>(); 
Resources res = context.getResources(); 
String[] searchEngines = res.getStringArray(R.array.search_engines); 
for (int i = 0; i < searchEngines.length; i++) { 
String name = searchEngines[i]; 
SearchEngineInfo info = new SearchEngineInfo(context, name); 
searchEngineInfos.add(info); 

return searchEngineInfos; 

看到R.array.search_engines 我们就找到配置搜索引擎的数据源头了,在 res/values/donottranslate-search_engines.xml 中。 定义如下: 
<!-- 
**** 
**** THIS FILE WAS GENERATED BY tools/get_search_engines.py 
**** 

Each value in the string-array is the name of a value in all_search_engines.xml 
--> 
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 
<string-array name="search_engines" translatable="false"> 
<item>google</item> 
<item>baidu</item> 
<item>Yahoo</item> 
</string-array> 
</resources> 
注释中已经提醒我们,这里的item 只是一个引用,真正的定义在 all_search_engines.xml 中。这样也是方便不同区域语言下的搜索引擎管理。集中到一个文件中定义,避免不必要的重复数据。 
3. 修改 
这下都搞清楚了就好修改了。首先在all_search_engines.xml 中添加对 XXX 搜索引擎的定义,然后修改 donottranslate-search_engines.xml 中的 item.  在实际操作中有几点还有说明下。 
Yahoo_uk 为例 
<string-array name="yahoo_uk" translatable="false"> 
<item>Yahoo! UK & Ireland</item> 
<item>uk.yahoo.com</item> 
<item>http://uk.search.yahoo.com/favicon.ico</item> 
<item>http://uk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}</item> 
<item>UTF-8</item> 
<item>http://uk-sayt.ff.search.yahoo.com/gossip-uk-sayt?output=fxjson&command={searchTerms}</item> 
</string-array> 
每个searchEngine 都定义了 6<item> 从上到下依次表示显示标签,关键字,搜索图标,搜索引擎地址,编码方式,搜索提示地址。 这些值因区域语言不同而不同。所以对不同的区域可能需要定义不同的搜索引擎。我们这里需要添加一个支持中国地区的 xxx 定义就可以了。 
<string-array name="xxxx" translatable="true"> 
<item>@string/xxxx_str</item> 
<item>xxx.xxx.com</item> 
<item>http://xxx.xxx.com/favicon.ico</item> 
<item>http:// xxx.xxx.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}</item> 
<item>GB2312</item> 
<item></item> 
</string-array>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值