Android 2.1学习笔记

移动开发 Android
Android 2.1: 2009 年 10 月 26 日,又一个主要版本升级以创纪录的速度放出。这次,大版本升级到了Android 2.1 “Eclair.”。

Android 2.0升级到Android  2.1之后将会获得以下的更新:3D的图片库、语音输入、新闻和天气插件、改进的锁定模式以及pinch-to-zoom 。当然对于大家之前十分关注的动态壁纸在Droid的Android  2.1中也会加入。但是MOTO也会使得自己的Droid拥有一定的个性,例如他们就不会加入Nexus One中的3D程序界面,不过这样已经很好了,我们现在就是希望能够更早的得到Android  2.1的推送。

1. 环境搭建

  1. Ubuntu+eclipse+ADT 

2. Android 启动很慢?

没办法,确实是很慢,等着吧,普遍说法是启动***次后不关闭,以后的就是部署了要快不少的,经测试,确实是要快一些的。最不能让我接受的是居然连点击Home键都是很慢的呢。

3.R.layout.main cannot be resolved

刚写了一行就出了这么个错误,让我没有一点脾气的来查找原因。

解决方案:

(1)删除第三行的“import android.R” 注:我不知道是什么时候加进来的。

(2)勾选Eclipse中的“Project->Build Automatically”

原因分析:

(1)删除“import andorid R”之后工程就是从/res文件夹下自动生成哦资源我呢间里去解析了,否则它会从Android的资源类里去找。

使用Eclipse进行Java开发,我们首先要注意到它的编译是智能的,进入Preferences 并启用动态构建(workbench>Build automatically)。这样的话,当我们每次保存文件时,Eclipse将会自动编译该文嘉以及依赖于该文件的文件。因此,当我们想运行应用程序的时候,它基本已经保存好并且是***版本了。在处理大型代码量时,着可以节约不少时间。

4.关于布局

买来的书是基于以前版本的(Android SDK 1.0r2),对控件的布局还是android:layout_x=”61px”,现在已经要android:layout_marginLeft=”61px” 这样写了,不然不起作用的。好奇的是还必须是px值,不然编译器就报错了,编译器还能识别字符串里的内容!果然强大。

5. 要在TextView中显示网址需要在TextView节点中加入android:autoLink = “all”

6. 常数(res\values) 这个文件夹下定义项目中要用到的所有常数,预先定义好,是编程的一个好习惯。例如:

(1)定义颜色常量(color.xml)

  1. <?xml version="1.0" encoding="utf-8" >    
  2.  <resources>    
  3.      <drawable name="darkgray">#808080FF</drawable>    
  4.      <drawable name="white">#FFFFFFFF</drawable>    
  5.  </resources>  

(2)定义字符串常量(strings.xml)

  1. <?xml version="1.0" encoding="utf-8" >    
  2.  <resources>    
  3.      <string  name="hello">Hello World Android</drawable>    
  4.      <string name="app_name">Test Android </drawable>    
  5.      <string  name="str_id">帐号</drawable>    
  6.      <string name="str_pwd">密码</drawable>    
  7.  </resources> 

定义好了怎么用呢,有两种引用方式:

(1)标记引用:android:text=”@string/str_id”

(2)代码引用:

  1. Resources resources = getBaseContenxt().getResources();    
  2.  Drawable HippoDrawable = resources.getDrawable(R.drawable.white);    
  3.  //String aa = resources.getString(R.string.app_name);    
  4.  //String bb = getString(R.string.app_name);    
  5.  TextView tv= (TextView)findViewByID(R.id.text);    
  6.  tv.setBackground(HippoDrawable);    
  7.  // 当然可以通过使用graphics.Color 这个android默认的颜色来使用,但是只有12种常见的颜色    
  8.  /×    
  9.  Color.BLACK    
  10.  Color.BLUE    
  11.  Color.CYAN    
  12.  Color.DKGRAY    
  13.  Color.GRAY    
  14.  Color.GREEN    
  15.  Color.LIGRAY    
  16.  Color.MAGENTA    
  17.  Color.REN    
  18.  Color.TRANSPARENT    
  19.  Color.WHITE    
  20.  Color.YELLOW    
  21.  ×/  
  1. view sourceprint?1 7.获取手机的分辨率   
  2. view sourceprint?1 这个就是Android与ios的不同,这个系统被不同的手机厂商使用,造出的机器也就大小各异了,而苹果的系统只有他自己用,所以能做到统一。   
  3. view sourceprint?1 DisplayMetrice dm = new DisplayMetrice();    
  4. getWindowManager().getDefaultDisplay().getMetrice(dm);    
  5. string strOpt="手机分辨率为:"dm.widthPixels + " x " + dm.heightPixels;  

#p#

7.Style样式的定义

老是要一个个指定文字的大小,颜色也不是办法的啊,所以也就有类似CSS样式来登场了。样式表文件取名为:style.xml放在res/values/style.xml 位置

定义样式示例:

  1. view sourceprint?01 <?xml version="1.0" encoding="utf-8" >    
  2.  <resources>    
  3.      <style name=DavidStyleText11>    
  4.          <item name="android:textSize">18sp</item>    
  5.          <item name="and<SCRIPT type=text/javascript> 
  6. <!--mce:0--> 
  7. </SCRIPT><SCRIPT type=text/javascript> 
  8. <!--mce:1--> 
  9. </SCRIPT><SCRIPT type=text/javascript> 
  10. <!--mce:2--> 
  11. </SCRIPT><SCRIPT type=text/javascript> 
  12. <!--mce:3--> 
  13. </SCRIPT><SCRIPT type=text/javascript> 
  14. <!--mce:4--> 
  15. </SCRIPT>roid:textColor">#EC9237  
  16. </item>    
  17.      </style>    
  18.      <style name=DavidStyleText22>    
  19.          <item name="android:textSize">18sp</item>    
  20.          <item name="android:textColor">#EC9237</item>    
  21.         <item name="android:fromAlphar">0.0</item>    
  22.          <item name="android:toAlphar">0.0</item>    
  23.      </style>    
  24.  </resources>  

view sourceprint?1 怎么用呢?下面为main.xml文件中的两个TextView应用不同的样式。

  1. <?xml version="1.0" encoding="utf-8" >    
  2. <TextView style = "@style/DavidStyleTest11"/>    
  3. <TextView style = "@style/DavidStyleTest22"/> 

8.页面切换

(1)在同一个Activity 中利用setContentView来置换页面(在res\layout\下定义main.xml 和mylayout.xml)

通过setContentView(R.layout.mylayout);setContentView(R.layout.main)来在两个layout中切换。在此有个优点:即所有的程序里的变量

都存在相同的状态,无论是类成员变量,类函数等,皆可以在一个Activiy的状态中直接取得,并没有参数传递的问题。

(2)调用另一个Activity

  1. /× new 一个 Intent 对象,并指定要启动的Class×/    
  2.  Intent intent = new Intent();    
  3.  intent.setClass(TestAndroid.this,TestAndroid2.class);    
  4.  startActivity(intent);    
  5.  TestAndroid.this.finish();  

view sourceprint?1 当系统中新添加Activity时,必须在AndroidManifest.xml里定义一个新的activity:

  1. <activity android:name=”TestAndroid2”> 
  2. </activity>  

否则系统将会因为找不到Activity而发生编译错误。

另外,当程序中出现两个以上的Activity时,系统要决定主程序是哪一支(entry point)

  1. <activity android:name=”.TestAndroid” android:lable="@string/app_name">   
  2.      <intent-filter>   
  3.      <action android:name="android.intent.action.MAIN"/>   
  4.      <category android:name="android.intent.catetory.LAUNCHER"/>   
  5.      </intent-filter>   
  6.  </activity>  

其中有一行为<category android:name="android.intent.catetory.LAUNCHER"/> ,这就代表程序启动时候,会先启动这个Activity,
 

而不是其他的,这个是必须定义一个的,如果xml中没有一个定义了,那么程序将不会启动的。

(3)不同的Activity之间的数据传递

  1. Intent intent = new Intent();   
  2. intent.setClass(TestAndroid.this,TestAndroid2.class);       
  3.  //new 一个bundle对象,并将要传递的数据传入   
  4.  Bundle bundle = new Bundle();   
  5.  bundle.putDouble("height",height);   
  6.  bundle.putString("Sex",sex);   
  7.  //将Bundle对象assign给Intent   
  8.  intent.putExtras(bundle);   
  9.  startActivity(intent);   
  10.  TestAndroid.this.finish();  

那么在TestAndroid2如何取得来自TestAndroid的数据呢,是这样子的 view sourceprint?1 //取得Intent中的Bundle对象 

  1. Bundle bunde = this.getIntent().getExtras();   
  2. String sex = bunde.getString("Sex");   
  3. double height = bunde.getDouble("height"); 

这样就取到数据了,除了上述简单的传递类型之外,还有String[]和ArrayList<String>等封装的方式。不知道能不能对Bundle 做C#中的扩展方法来传递自己的对象?需要研究一下。

(4)返回数据到前一个Activity

在***个Activity这样开始数据初始化

  1. view sourceprint?01 Intent intent = new Intent();   
  2. intent.setClass(TestAndroid.this,TestAndroid2.class);   
  3. //new 一个bundle对象,并将要传递的数据传入   
  4. Bundle bundle = new Bundle();   
  5. bundle.putDouble("height",height);   
  6. bundle.putString("Sex",sex);   
  7. //将Bundle对象assign给Intent   
  8. intent.putExtras(bundle);       
  9. //调用Activity TestAndroid2   
  10. startActivityForResult(intent,0);  

在第二个Activity中取到数据后(按上一种方法取),使用完毕,这样返回 view sourceprint?1 //返回result 回上一个activity 

  1. TestAndroid2.this.setResult(RESULT_OK, intent);   
  2.  //结束这个activity   
  3.  TestAndroid2.this.finish(); 

回到***个Activity是这样来取得返回的数据

  1. view sourceprint?01 //覆盖 onActivityResult()   
  2.  Protcted void onActivityResult(int requestCode,int resultCode,Intent data)   
  3.  {   
  4.      switch(resultCode)   
  5.      {   
  6.       case: RESULT_OK:   
  7.      Bundle bunde = data.getExtras();   
  8.      String sex=bunde.getString("Sex");   
  9.      double height = bunde.getDouble("height");   
  10.     ...   
  11.      }  

如果要在次页面加上一个“回上页”的按钮,而非通过模拟器的回复键,且回上页后又能保留之前输入的相关信息,那么就必须使用startActivityForResult()来唤起一个Activity。利用这个方法,前一哦Activity1便会有一个等待次Activity2的返回,而返回的数据就可以达到我们想要的结果。

【编辑推荐】

深度解析Android Activity初探

Android开发:Activity之间的传值

Android应用之Activity传参数与跳转

Android Activity和Intent机制学习笔记

责任编辑:zhaolei 来源: 网络转载
相关推荐

2011-04-12 17:16:52

Activity跳转开发实例Android学习笔记

2011-09-09 13:59:17

Android wid

2011-06-02 16:49:15

Android SDK 安装

2013-04-03 14:58:43

Android学习笔记实用代码合集

2011-09-07 11:15:25

2011-09-07 10:34:48

Android Wid

2010-01-14 09:08:24

Android 2.1

2010-03-04 16:42:59

2009-12-01 11:04:57

Android 2.1

2011-03-30 17:32:28

androidmaniAndroid开发

2011-04-08 09:46:28

Layout.xmlAndroid

2011-05-30 14:00:35

Android Activity Intent

2010-02-05 17:34:37

Android 2.1

2010-02-05 14:48:04

Android手机操作

2010-02-07 11:22:17

Android OS

2011-05-31 17:08:41

Android 网络连接

2011-06-03 11:36:47

Android 移动设备

2010-01-13 17:41:40

Android 2.1

2011-08-31 10:51:39

MTKAndroid 开发

2013-06-28 13:38:45

AndroidAndroidMani
点赞
收藏

51CTO技术栈公众号