Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android---Java與WebView的交互之Goolge翻譯

Android---Java與WebView的交互之Goolge翻譯

編輯:Android開發實例

今天想介紹的Java與WebView的交互,暫時只應用到了一部分:Java用JS代碼實現實時翻譯;其次還使用到諸如SharedPreferences、自定義Dialog、網絡測試、Spinner控件使用等等,其實完全掌握也是有蠻多東東的。

(1)中間按鈕的效果實現,就是用到了SharedPreferences,使用SharedPreferences保存上一次的源語言代碼(languagecode)和目標語言代碼(例如:簡體中文:zh-cn,繁體中文:zh-tw),這兩個東東是google翻譯api必須得兩個參數後面在詳細介紹。語言代碼為了方便省事,就用一個SrcAndDest類進行封裝。

 

 
public List<HashMap<String,Object>> getSrcAndDest(){
list=new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("enc", "zh-CN");
map.put("text", "中文(簡體)");
list.add(map);
map = new HashMap<String,Object>();
map.put("enc", "zh-TW");
map.put("text", "中文(繁體)");
list.add(map);
map = new HashMap<String,Object>();
map.put("enc", "en");
map.put("text", "英語");
list.add(map);     ........
}

每次退出程序時,只用保存源(srcIndex)和目標(destIndex)在list中位置(position),然後就能得到enc(languagecode:google翻譯Api的參數)和text(用於顯示在按鈕上的文本)

 
    private void putSetting(int srcindex,int destindex){
SharedPreferences settings=getPreferences(MODE_PRIVATE);
Editor editor=settings.edit();
editor.putInt("srcIndex", srcindex);
editor.putInt("destIndex", destindex);
editor.commit();
}

進入界面,進行初始化設置,獲得src和dest的enc和text

 

    /*
* 初始化上一次src和dest
*/
private void getSetting(){
SharedPreferences settings=getPreferences(MODE_PRIVATE);
srcIndex=settings.getInt("srcIndex", 0);
destIndex=settings.getInt("destIndex", 0);
//得到src和dest語言LanguageCode:enc(例如:簡體中文:zh-cn,繁體中文:zh-tw)和文本(text)
src=alenc.get(srcIndex);//alenc一個ArrayList<String>對象,保存enc
dest=alenc.get(destIndex);
stext=altext.get(srcIndex);//altext一個ArrayList<String>對象,保存text
dtext=altext.get(destIndex);
String text=stext+">>"+dtext;     //第一次使用時,需要進行翻譯配置即src和dest的配置
if(srcIndex!=destIndex){
btnch.setText(text);
}else{
if(srcIndex==0){
btnch.setText("翻譯設置");
}else{
btnch.setText(text);
}
}
}

(2)第一個按鈕的作用是實現src和dest的互換,比如說從簡體中文>>英語換成英語>>簡體中文,實現這個效果很簡單,用上面兩個方法就能實現,先保存(putsettings(int srcindex,int destindex))然後再獲取(getsettings())

(3)翻譯配置:

這裡是一個自定義的Dialog,因為使用到了Spinner控件,所以自定義一個xml布局是最方便的。

 
//自定義view的Dialog
LayoutInflater flater=this.getLayoutInflater();
View view=flater.inflate(R.layout.alertview, null);
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setView(view);
builder.setTitle("languageCode 設置");
spsrc=(Spinner)view.findViewById(R.id.spsrc);
spdest=(Spinner)view.findViewById(R.id.spdest);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, altext);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spsrc.setAdapter(adapter);
spsrc.setSelection(srcIndex);
adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, altext);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spdest.setAdapter(adapter);
spdest.setSelection(destIndex);
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
srcIndex=spsrc.getSelectedItemPosition();
destIndex=spdest.getSelectedItemPosition();
//先保存,後獲取配置
putSetting(srcIndex, destIndex);
getSetting();
}
});
builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
});
builder.create().show();

(4)最後一個就是使用Google翻譯的Api實現翻譯,這裡需要用到一個html文件,這個文件需要放到assets文件夾中(注意下圖中有點的url),html中包含了兩個方法,一個是Google的API,另一個是自己寫的JavaScript函數(Java中就是調用這個translate函數)

 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("language", "1");
function g_translate(strInput,src,dest,out){
google.language.translate(strInput, src, dest, function(result){
if (!result.error){
document.getElementById(out).innerHTML=result.translation;
}else
document.getElementById(out).innerHTML="google_translate Error!";
});
}
</script>


<body style="background-color:#fff">
<div id="show" style="font-size:16px; color:#666;"></div>
<script language="javascript"><!--strTranslate:要翻譯的文本;src:源語言;dest:目標語言 -->
function translate(strTranslate,src,dest)
{
document.getElementById("show").innerHTML="翻譯中.....";
g_translate(strTranslate,src,dest,"show");
}
</script>
</body>
</html>

如果要允許Java調用html中的Js方法,必須設置WebView的WebSettings屬性

//添加web設置,js可用
view.loadUrl(url);
WebSettings settings=view.getSettings();
settings.setJavaScriptEnabled(true);

檢查網絡是否連接:

 
    //檢查網絡是否連接
public boolean checkIntent(){
ConnectivityManager mannager=(ConnectivityManager)
this.getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo info=mannager.getActiveNetworkInfo();
if(info==null || !info.isConnected()){
return false;
}
if(info.isRoaming()){
return true;
}
return true;
}

最後點擊翻譯按鈕調用js方法:

 
            hander.post(new Runnable() {

@Override
public void run() {
String text=etinput.getText().toString();
if(!text.equals("")){
// TODO Auto-generated method stub
Log.v("main", src+"/"+dest+"/"+srcIndex+"/"+destIndex);
view.loadUrl("javascript:translate('"+
text + "','"+src+"','"+dest+"')");
}
}
});

 上一張效果圖:希望找工作順利,阿門

轉自:http://www.cnblogs.com/jico/archive/2010/11/08/1871981.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved