首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

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

2012-06-26 
Android 浏览器设置中的搜索引擎更改浏览器设置中的搜索引擎?1.?需求?将浏览器设置中的搜索引擎更改为XXXX

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>

1 楼 谋生者 2012-04-28   你上面提到的几俱xml文件在browser/res/values/下都没找到,能不能说清楚一点?谢谢。。 2 楼 谋生者 2012-04-28   你上面提到的几个xml文件在browser/res/values/下都没找到,能不能说清楚一点?谢谢。。

热点排行