免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2940 | 回复: 0
打印 上一主题 下一主题

Android---Java与WebView的交互之Goolge翻译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-09 10:51 |只看该作者 |倒序浏览
转自:芦笋炒肉

想找工作了,于是乎,自娱自乐着找了找之前的一些小应用完善完善,以作备用。
今天想介绍的Java与WebView的交互,暂时只应用到了一部分:Java用JS代码实现实时翻译;其次还使用到诸如SharedPreferences、自定义Dialog、网络测试、Spinner控件使用等等,其实完全掌握也是有蛮多东东的。


(1)中间按钮的效果实现,就是用到了SharedPreferences,使用SharedPreferences保存上一次的源语言代码(languagecode)和目标语言代码(例如:简体中文:zh-cn,繁体中文:zh-tw),这两个东东是google翻译api必须得两个参数后面在详细介绍。语言代码为了方便省事,就用一个SrcAndDest类进行封装。
  1. public List<HashMap<String,Object>> getSrcAndDest(){
  2.         list=new ArrayList<HashMap<String,Object>>();
  3.         HashMap<String,Object>     map = new HashMap<String,Object>();
  4.         map.put("enc", "zh-CN");
  5.         map.put("text", "中文(简体)");
  6.         list.add(map);
  7.         map = new HashMap<String,Object>();
  8.         map.put("enc", "zh-TW");
  9.         map.put("text", "中文(繁体)");
  10.         list.add(map);
  11.         map = new HashMap<String,Object>();
  12.         map.put("enc", "en");
  13.         map.put("text", "英语");
  14.         list.add(map);
  15.      ........
  16. }
复制代码
每次退出程序时,只用保存源(srcIndex)和目标(destIndex)在list中位置(position),然后就能得到enc(languagecode:google翻译Api的参数)和text(用于显示在按钮上的文本)
  1.     private void putSetting(int srcindex,int destindex){
  2.         SharedPreferences settings=getPreferences(MODE_PRIVATE);
  3.         Editor editor=settings.edit();
  4.         editor.putInt("srcIndex", srcindex);
  5.         editor.putInt("destIndex", destindex);
  6.         editor.commit();
  7.     }
复制代码
进入界面,进行初始化设置,获得src和dest的enc和text
  1. /*
  2.      * 初始化上一次src和dest
  3.      */
  4.     private void getSetting(){
  5.         SharedPreferences settings=getPreferences(MODE_PRIVATE);
  6.         srcIndex=settings.getInt("srcIndex", 0);
  7.         destIndex=settings.getInt("destIndex", 0);
  8.         //得到src和dest语言LanguageCode:enc(例如:简体中文:zh-cn,繁体中文:zh-tw)和文本(text)
  9.         src=alenc.get(srcIndex);//alenc一个ArrayList<String>对象,保存enc
  10.         dest=alenc.get(destIndex);
  11.         stext=altext.get(srcIndex);//altext一个ArrayList<String>对象,保存text
  12.         dtext=altext.get(destIndex);
  13.         String text=stext+">>"+dtext;
  14.      //第一次使用时,需要进行翻译配置即src和dest的配置
  15.         if(srcIndex!=destIndex){
  16.             btnch.setText(text);
  17.         }else{
  18.             if(srcIndex==0){
  19.                 btnch.setText("翻译设置");
  20.             }else{
  21.                 btnch.setText(text);
  22.             }
  23.         }
  24.     }
复制代码
(2)第一个按钮的作用是实现src和dest的互换,比如说从简体中文>>英语换成英语>>简体中文,实现这个效果很简单,用上面两个方法就能实现,先保存(putsettings(int srcindex,int destindex))然后再获取(getsettings())

(3)翻译配置:

这里是一个自定义的Dialog,因为使用到了Spinner控件,所以自定义一个xml布局是最方便的。
  1. //自定义view的Dialog
  2.             LayoutInflater flater=this.getLayoutInflater();
  3.             View view=flater.inflate(R.layout.alertview, null);
  4.             AlertDialog.Builder builder=new AlertDialog.Builder(this);
  5.             builder.setView(view);
  6.             builder.setTitle("languageCode 设置");
  7.             spsrc=(Spinner)view.findViewById(R.id.spsrc);
  8.             spdest=(Spinner)view.findViewById(R.id.spdest);
  9.             ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
  10.                     android.R.layout.simple_spinner_item, altext);
  11.             adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  12.             spsrc.setAdapter(adapter);
  13.             spsrc.setSelection(srcIndex);
  14.             adapter=new ArrayAdapter<String>(this,
  15.                     android.R.layout.simple_spinner_item, altext);
  16.             adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  17.             spdest.setAdapter(adapter);
  18.             spdest.setSelection(destIndex);
  19.             builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
  20.                
  21.                 @Override
  22.                 public void onClick(DialogInterface dialog, int which) {
  23.                     // TODO Auto-generated method stub
  24.                     srcIndex=spsrc.getSelectedItemPosition();
  25.                     destIndex=spdest.getSelectedItemPosition();
  26.                     //先保存,后获取配置
  27.                     putSetting(srcIndex, destIndex);
  28.                     getSetting();
  29.                 }
  30.             });
  31.             builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {
  32.                
  33.                 @Override
  34.                 public void onClick(DialogInterface dialog, int which) {
  35.                     // TODO Auto-generated method stub
  36.                     
  37.                 }
  38.             });
  39.             builder.create().show();
复制代码
(4)最后一个就是使用Google翻译的Api实现翻译,这里需要用到一个html文件,这个文件需要放到assets文件夹中(注意下图中有点的url),html中包含了两个方法,一个是Google的API,另一个是自己写的JavaScript函数(Java中就是调用这个translate函数)
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. </head>
  5. <script type="text/javascript" src="http://www.google.com/jsapi"></script>
  6. <script type="text/javascript">
  7.     google.load("language", "1");
  8.     function g_translate(strInput,src,dest,out){
  9.         google.language.translate(strInput, src, dest, function(result){
  10.           if (!result.error){
  11.             document.getElementById(out).innerHTML=result.translation;
  12.             }else
  13.             document.getElementById(out).innerHTML="google_translate Error!";
  14.         });
  15.       }
  16. </script>
  17.   

  18. <body style="background-color:#fff">
  19. <div id="show" style="font-size:16px; color:#666;"></div>
  20. <script language="javascript">
  21. <!--strTranslate:要翻译的文本;src:源语言;dest:目标语言 -->
  22. function translate(strTranslate,src,dest)
  23. {
  24.     document.getElementById("show").innerHTML="翻译中.....";
  25.     g_translate(strTranslate,src,dest,"show");
  26. }
  27. </script>
  28. </body>
  29. </html>
复制代码
如果要允许Java调用html中的Js方法,必须设置WebView的WebSettings属性
  1. //检查网络是否连接
  2.     public boolean checkIntent(){
  3.         ConnectivityManager mannager=(ConnectivityManager)
  4.               this.getSystemService(CONNECTIVITY_SERVICE);
  5.         NetworkInfo info=mannager.getActiveNetworkInfo();
  6.         if(info==null || !info.isConnected()){
  7.             return false;
  8.         }
  9.         if(info.isRoaming()){
  10.             return true;
  11.         }
  12.         return true;
  13.     }
复制代码
最后点击翻译按钮调用js方法:
  1. hander.post(new Runnable() {
  2.                
  3.                 @Override
  4.                 public void run() {
  5.                     String text=etinput.getText().toString();
  6.                     if(!text.equals("")){
  7.                     // TODO Auto-generated method stub
  8.                         Log.v("main", src+"/"+dest+"/"+srcIndex+"/"+destIndex);
  9.                         view.loadUrl("javascript:translate('"+
  10.                                   text + "','"+src+"','"+dest+"')");
  11.                     }
  12.                 }
  13.             });
复制代码
上一张效果图:希望找工作顺利,阿门
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP