google在线翻译二

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值