生命之中的最大错误在于:终日担心犯错误。— 爱尔伯特·哈伯德 (Elbert Hubbard 1856-1915),《笔记》
做了个tab形式的界面,但一直找不到系统提供的接口怎么修改图标,因为当前选择的和未选择的会改变。
添加tab的代码其实很简单
TabHost mTabHost = getTabHost();
TabHost.TabSpec tab_category = mTabHost.newTabSpec(tab_tag[0]);
tab_category.setIndicator(tabIndex[0], getResources().getDrawable(R.drawable.ic_tab_selected_contacts));
tab_category.setContent(R.id.layout_category);
mTabHost.addTab(tab_category);
//其它tab类似
//监听tab点击事件
mTabHost.setOnTabChangedListener(this);
TabHost.TabSpec tab_category = mTabHost.newTabSpec(tab_tag[0]);
tab_category.setIndicator(tabIndex[0], getResources().getDrawable(R.drawable.ic_tab_selected_contacts));
tab_category.setContent(R.id.layout_category);
mTabHost.addTab(tab_category);
//其它tab类似
//监听tab点击事件
mTabHost.setOnTabChangedListener(this);
setIndicator可以设置tab的标题和图标。
可是,会发现个问题,onTabChanged函数里,并不能如自己想的那样改变icon:
比如,你找到tab_category对象后,这样的操作无效:
tab_category.setIndicator(tabIndex[0], getResources().getDrawable(R.drawable.ic_tab_unselected_contacts));
这挺烦人的,可也不是没有办法,很难得居然搜到了答案:

如图的layout设计是怎么样解决呢?
1 LinearLayout做大的布局
2 里面内嵌 LinearLayout 做水平布局放置图标和标题
3 添加 LinearLayout 水平布局放置其它信息
4 添加 LinearLayout 放置返回按钮等操作键
5 添加 ScrollView放置文章内容,高度比重为1,占据所有空间
6 在ScrollView里面只能添加一个元素,放置一个 LinearLayout 做垂直部署放置图文资料
如果不放置ScrollView,则不会出现滚动操作,没有滚动条,这个是必须添加的。
简化的xml布局文件:

盒子和手机

和IPhone摆一起
两款手机对比的感觉:
IPhone下的应用开发的界面都相对来说精细很多,界面设计都比较统一,基本上都在界面操作
G2有点不好的就是很多都靠点击menu键和返回键,很多应用都不是界面上返回,这个操作体验并不好
G2包含的Google服务真的很不错,喜欢google地图和Gmail以及日历之类的应用的朋友对这款手机真的不容错过了!
让我们开始用一个web应用开始我们的Android之旅~ 逐步了解如何创建一个应用。
开始构建一个webkit程序
最简单的构建一个程序就不说了,见文末附录参考文章。
一个Webview程序有几个问题:
1 需要允许访问互联网
2 捕获链接点击,不能让系统接手用浏览器打开新链接
3 重定义返回键,防止返回就回到桌面了
代码(本示例从Sample文件里的WebView1.java为母版修改):
[android-sdk-windows-1.5_r2\platforms\android-1.5\samples\ApiDemos\src\com\example\android\apis\view]
开始构建一个webkit程序
最简单的构建一个程序就不说了,见文末附录参考文章。
一个Webview程序有几个问题:
1 需要允许访问互联网
2 捕获链接点击,不能让系统接手用浏览器打开新链接
3 重定义返回键,防止返回就回到桌面了
代码(本示例从Sample文件里的WebView1.java为母版修改):
[android-sdk-windows-1.5_r2\platforms\android-1.5\samples\ApiDemos\src\com\example\android\apis\view]
package com.example.android.apis.view;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;
import android.app.AlertDialog;
import android.content.DialogInterface;
public class WebView1 extends Activity {
private WebView wv;
private String init_url = "http://www.aslibra.com/android/";
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
wv = (WebView) findViewById(R.id.wv1);
//允许运行脚本
wv.getSettings().setJavaScriptEnabled(true);
//捕获链接点击
wv.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//捕获网址,以后也许可以根据锚链接处理点互动
show_msg(url);
view.loadUrl(url);
return true;
}
});
wv.loadUrl(init_url);
}
public void show_msg(String msg){
new AlertDialog.Builder(this)
.setTitle("提示:有链接点击")
.setMessage(msg)
/*.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})*/
.show();
}
//防止点击链接后按返回直接回到桌面
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {
wv.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;
import android.app.AlertDialog;
import android.content.DialogInterface;
public class WebView1 extends Activity {
private WebView wv;
private String init_url = "http://www.aslibra.com/android/";
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
wv = (WebView) findViewById(R.id.wv1);
//允许运行脚本
wv.getSettings().setJavaScriptEnabled(true);
//捕获链接点击
wv.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//捕获网址,以后也许可以根据锚链接处理点互动
show_msg(url);
view.loadUrl(url);
return true;
}
});
wv.loadUrl(init_url);
}
public void show_msg(String msg){
new AlertDialog.Builder(this)
.setTitle("提示:有链接点击")
.setMessage(msg)
/*.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})*/
.show();
}
//防止点击链接后按返回直接回到桌面
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {
wv.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
今天要讨论一下Android下的开发的问题,需要了解一下Android的开发环境,何不Helloworld一下?
1 安装作业环境
工作所需有:JDK、ADT、Eclipse,安装指导请参考这里。
先安装JDK,下载1.5以上的,安装即可,不多说,如果有安装旧版jbuilder,可能java_home变量是jbuilder目录的java环境,自己修改一下即可。
我下载的 eclipse-java-europa-winter-win32.zip ,解压即可,然后按照说明配置ADT,这个都很顺利。
2 创建Helloworld
按照 Hello, Android! 做下去即可。
运行的时候,我碰到问题了,找不到AVD设备,折磨许久。
有如下错误:
尝试在Android的tools目录用命令创建也没用
1 安装作业环境
工作所需有:JDK、ADT、Eclipse,安装指导请参考这里。
引用
所需开发环境:Eclipse IDE
Eclipse 3.3 (Europa), 3.4 (Ganymede)
- Eclipse JDT 插件 (大多数的 Eclipse IDE 包包含)
- WST (可选,但Android编辑器的功能需要,它被包含在most Eclipse IDE packages 中)
JDK 5 或 JDK 6 (只有JRE是不够的)
Android Development Tools 插件 (可选 )
不兼容GNU Java编译器(gcj)
Eclipse 3.3 (Europa), 3.4 (Ganymede)
- Eclipse JDT 插件 (大多数的 Eclipse IDE 包包含)
- WST (可选,但Android编辑器的功能需要,它被包含在most Eclipse IDE packages 中)
JDK 5 或 JDK 6 (只有JRE是不够的)
Android Development Tools 插件 (可选 )
不兼容GNU Java编译器(gcj)
先安装JDK,下载1.5以上的,安装即可,不多说,如果有安装旧版jbuilder,可能java_home变量是jbuilder目录的java环境,自己修改一下即可。
我下载的 eclipse-java-europa-winter-win32.zip ,解压即可,然后按照说明配置ADT,这个都很顺利。
2 创建Helloworld
按照 Hello, Android! 做下去即可。
运行的时候,我碰到问题了,找不到AVD设备,折磨许久。
有如下错误:
[2009-07-15 00:03:46 - helloAndroid] Android Launch!
[2009-07-15 00:03:46 - helloAndroid] adb is running normally.
[2009-07-15 00:03:46 - helloAndroid] Performing com.android.hello.helloAndroid activity launch
[2009-07-15 00:03:50 - helloAndroid] Launching a new emulator with Virtual Device 'my_avd'
[2009-07-15 00:03:50 - Emulator] emulator: ERROR: unknown virtual device name: 'my_avd'
[2009-07-15 00:03:50 - Emulator] emulator: could not find virtual device named 'my_avd'
[2009-07-15 00:03:46 - helloAndroid] adb is running normally.
[2009-07-15 00:03:46 - helloAndroid] Performing com.android.hello.helloAndroid activity launch
[2009-07-15 00:03:50 - helloAndroid] Launching a new emulator with Virtual Device 'my_avd'
[2009-07-15 00:03:50 - Emulator] emulator: ERROR: unknown virtual device name: 'my_avd'
[2009-07-15 00:03:50 - Emulator] emulator: could not find virtual device named 'my_avd'
尝试在Android的tools目录用命令创建也没用





