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>
在规划这个界面中只用了几个小组件:TextView、EditText、Button、WebView
哈哈,看到这里,你一定想知道这段代码生成的界面的样子是怎样的吧?好,先保持一点神秘感!实现了布局,下面应该做什么呢?
答案是显而易见的,
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。下面还是先介绍下怎样实现webview和html的交换吧!webView.loadUrl(url);方法可以打开一个url或本地html,相信这个大家都知道!那么怎样实现交互呢?如果你装饰过QQ空间的话,你一定知道在当前网页的地址栏上填入javascript:translate()就可以调用当前页面的javascript的translate()函数!这样一来,问题就简单多了,我知道很多人会选择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自己的手机吧,打造真正的个性手机!分享是快乐的,千言万语道不尽!