google在线翻译二

    技术2022-05-20  56

    Android在近几年得到了千千万万的开发者和移动厂商的一致好评。Android承诺开源,秉承了Google的一贯作风,开源为移动生产商节约了成本。当然单靠节约成本是不够的,Android系统是一个具有丰富用户体验的手机平台或移动平台,不仅让用户赏心悦目享受到她提供的music、影视、摄影和互联网等丰富的多媒体冲击。如果只有这些,android怎可能流行起来呢?所以android还针对开发者提供了十分丰富的编程接口(api)极其简单地复杂的应用,正因为android对开发者的万般呵护,以致万千开发者热情地投入了android的怀抱,当然我也是其中一个,废话就不多说了!借助“首届Google暑期大学生博客分享大赛——2010 Andriod篇”的机会分享android可爱之美吧!下面以在线翻译软件为例子,带大家体验android开发的无穷乐趣吧!

    我的英语不怎么好,平时都是依靠电脑上翻译工具完成作业,可是电脑太臃肿了,于是我有了一个异想天开的想法,自己做一个手机翻译软件!DIY,会不会太难了,也许在别的手机系统上,这个的确好难!但是android不一样!开发android应用简单到让你惊讶…..

    开发这个软件的思路:本人比较擅长javascript,对Google api比较了解,所以想借助Google翻译api结合webView来实现!

    参考网站:http://code.google.com/intl/zh-CN/apis/ajaxlanguage/documentation/

    google.language.translate(text|option, srcLang, destLang, callback)至于webView的介绍,大家可以参考android docs

    哈哈,不废话了,下面做第一件事,规划简洁而不单调的用户界面,代码如下:

    Layout/main.xml

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:orientation="vertical"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:gravity="right"

        >

    <TextView

        android:layout_marginTop="10px"

        android:id="@+id/l_about" 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/app_name"

        android:textSize="20sp"

        android:gravity="center_horizontal"

        android:typeface="sans"

        />

     < TextView

        android:layout_marginTop="10px"

        android:id="@+id/l_select"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        />

     <EditText

        android:layout_marginTop="10px"

        android:id="@+id/tinput"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:hint="输入要翻译的词或句子"

        />

     <Button

        android:layout_marginTop="10px"

        android:id="@+id/submit"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text=" 开始翻译  "

     />

     <TextView

        android:id="@+id/tips"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="翻译结果如下:"

        android:textSize="14sp"

        android:typeface="sans"

        android:visibility="invisible"

        />

     <WebView

        android:layout_marginTop="10px"

        android:id="@+id/toutput"

        android:layout_width="fill_parent"

        android:layout_height="180px"

        android:visibility="invisible"

        />

    </LinearLayout>

    在规划这个界面中只用了几个小组件:TextViewEditTextButtonWebView

    哈哈,看到这里,你一定想知道这段代码生成的界面的样子是怎样的吧?好,先保持一点神秘感!实现了布局,下面应该做什么呢?

    答案是显而易见的,

    public class TranslationOnline extends Activity {

        private TextView tips;

        private EditText editText;

        private WebView webView;

        private String[] chooseStr={"简体中文->英语","英语->简体中文"};

          

        @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

           

            webView=(WebView)findViewById(R.id.toutput);

            final Button submit=(Button)findViewById(R.id.submit);

            editText=(EditText)findViewById(R.id.tinput);

            tips=(TextView)findViewById(R.id.tips);

            final Spinner l_select=(Spinner)findViewById(R.id.l_select);

     

            ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,

                 android.R.layout.simple_spinner_item,chooseStr);//配置一个适配器

            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

            l_select.setPrompt("请选择翻译的方式");

            l_select.setOnItemSelectedListener(new OnItemSelectedListener() {

     

               @Override

               public void onItemSelected(AdapterView<?> arg0, View arg1,

                      int arg2, long arg3) {

       

               }

     

               @Override

               public void onNothingSelected(AdapterView<?> arg0) {

               }

           });

            l_select.setAdapter(adapter);

           

            WebSettings webSettings = webView.getSettings();

            webSettings.setJavaScriptEnabled(true);

            webSettings.setSaveFormData(false);

            webSettings.setSavePassword(false);

            webSettings.setSupportZoom(false);

           

            submit.setOnClickListener(new OnClickListener() {       

               @Override

               public void onClick(View v) {

                 

                       }

                   });

               }

           });

        }

    }

    上面都是很普通的代码,故不作注释了!现在我为大家揭开界面之谜吧!

    界面的确简洁了点!

    这个软件最核心的部分就是使用Google 翻译API。下面还是先介绍下怎样实现webviewhtml的交换吧!webView.loadUrl(url);方法可以打开一个url或本地html,相信这个大家都知道!那么怎样实现交互呢?如果你装饰过QQ空间的话,你一定知道在当前网页的地址栏上填入javascript:translate()就可以调用当前页面的javascripttranslate()函数!这样一来,问题就简单多了,我知道很多人会选择webserver来实现翻译!但是那些太复杂了,而且浪费手机资源!看看html代码先吧!

    Assets/ cn2en.html

    <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,out){

            google.language.translate(strInput, "zh-CN", "en", 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">

    function translate(strTranslate)

    {

        document.getElementById("show").innerHTML="翻译中.....";

        g_translate(strTranslate, "show");

    }

    </script>

    </body>

    </html>

    更详细的参考http://code.google.com/intl/zh-CN/apis/ajaxlanguage/documentation/

    google.language.translate(text|option, srcLang, destLang, callback)这个API实现翻译功能!我也不多说了,参考官方的文档更有意思,而且看官方的开发文档这是每一个开发者的好习惯,更是超越现实,突破自己的最好方式,也是我说得太夸张了,我还是强调看文档的重要性!

    Android中实现多线程有很多方法的,如实现Runnable接口,扩展线程类或者Handler

    下面看看完整的代码吧:

    package com.hl.translationonline;

     

    import android.app.Activity;

    import android.os.Bundle;

    import android.os.Handler;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.webkit.WebSettings;

    import android.webkit.WebView;

    import android.widget.AdapterView;

    import android.widget.ArrayAdapter;

    import android.widget.Button;

    import android.widget.EditText;

    import android.widget.Spinner;

    import android.widget.TextView;

    import android.widget.AdapterView.OnItemSelectedListener;

     

    public class TranslationOnline extends Activity {

        private TextView tips;

        private EditText editText;

        private WebView webView;

        private String[] url = {"file:///android_asset/cn2en.html",

               "file:///android_asset/en2cn.html"};//这里我是分开两个页面实现翻译模式简体中文->英语英语->简体中文的,当然你也可以用个文件来实现,不过要改写函数,

        private String[] chooseStr={"简体中文->英语","英语->简体中文"};//翻译模式设定,本示例只是实现了英语和中文之间的转译,其实你还可以实现多国语言翻译的!这是留给读者去思考吧!

        private Handler tHandler = new Handler();//利用Handler来实现线程通信

          

        @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

           

            webView=(WebView)findViewById(R.id.toutput);

            final Button submit=(Button)findViewById(R.id.submit);

            editText=(EditText)findViewById(R.id.tinput);

            tips=(TextView)findViewById(R.id.tips);

            final Spinner l_select=(Spinner)findViewById(R.id.l_select);

     

            ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,

                 android.R.layout.simple_spinner_item,chooseStr);

            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

            l_select.setPrompt("请选择翻译的方式");

            l_select.setOnItemSelectedListener(new OnItemSelectedListener() {

     

               @Override

               public void onItemSelected(AdapterView<?> arg0, View arg1,

                      int arg2, long arg3) {//通过选择来设置翻译模式

                  if(((TextView)arg1).getText()==chooseStr[0])

                      webView.loadUrl(url[0]);

                  if(((TextView)arg1).getText()==chooseStr[1])

                      webView.loadUrl(url[1]);

               }

     

               @Override

               public void onNothingSelected(AdapterView<?> arg0) {

                  webView.loadUrl(url[0]);//默认模式

               }

           });

            l_select.setAdapter(adapter);

           

            WebSettings webSettings = webView.getSettings();

            webSettings.setJavaScriptEnabled(true);

            webSettings.setSaveFormData(false);

            webSettings.setSavePassword(false);

            webSettings.setSupportZoom(false);

            //翻译按钮被点击时

            submit.setOnClickListener(new OnClickListener() {       

               @Override

               public void onClick(View v) {

                  tips.setVisibility(TextView.VISIBLE);//提示可见

                  webView.setVisibility(WebView.VISIBLE);//翻译结果可见

                  tHandler.post(new Runnable(){

                       public void run(){

                         if (editText.getText().toString() != ""){

           //翻译…………

                         webView.loadUrl("javascript:translate('"+

                                 editText.getText().toString() + "')");

                         }

                       }

                   });

               }

           });

        }

    }

    当然不要忘记申请访问internet的权限

    <uses-permission android:name="android.permission.INTERNET" />

    说到这是,一个完整的在线翻译软件也十分顺利的完成了!现在是时候看看她的功能吧!

    成功是喜悦的!android应用开发简单吧!那你还在等什么呢?赶快加入我们这个开发队伍吧,DIY自己的手机吧,打造真正的个性手机!分享是快乐的,千言万语道不尽!


    最新回复(0)