我们已经成功地在模拟器和手机上运行起来我们得Hello World程序,那么让我们回过头来看看这个工程的结构。

    打开解决方案资源管理器,比较值得我们关注的有以下的文件和文件夹:Activity1.cs,Resources文件夹下的文件夹及文件。

    Activity1.cs的内容与一般的C#文件相似。

 

  1. using System;  
  2.   
  3. using Android.App;  
  4. using Android.Content;  
  5. using Android.Runtime;  
  6. using Android.Views;  
  7. using Android.Widget;  
  8. using Android.OS;  
  9.   
  10. namespace MonoDroidTest  
  11. {  
  12.     [Activity(Label = “MonoDroidTest”, MainLauncher = true)]  
  13.     public class Activity1 : Activity  
  14.     {  
  15.         int count = 1;  
  16.   
  17.         protected override void OnCreate(Bundle bundle)  
  18.         {  
  19.             base.OnCreate(bundle);  
  20.   
  21.             // Set our view from the “main” layout resource   
  22.             SetContentView(Resource.Layout.Main);  
  23.   
  24.             // Get our button from the layout resource,   
  25.             // and attach an event to it   
  26.             Button button = FindViewById<Button>(Resource.Id.MyButton);  
  27.   
  28.             button.Click += delegate { button.Text = string.Format(“{0} clicks!”, count++); };  
  29.         }  
  30.     }  
  31. }  

using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; namespace MonoDroidTest { [Activity(Label = “MonoDroidTest”, MainLauncher = true)] public class Activity1 : Activity { int count = 1; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the “main” layout resource SetContentView(Resource.Layout.Main); // Get our button from the layout resource, // and attach an event to it Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { button.Text = string.Format(“{0} clicks!”, count++); }; } } }

 

    可以看到,Activity1这个类是继承自Activity类得,在类中重写了OnCreate方法,在方法内以SetContentView方法来设置这个Activity要显示的布局(Resource.Layout.Main),那么这个Resource.Layout.Main是哪里来的呢?打开Resource.Designer.cs这个文件你就能看到了,这个Resource.Layout.Main其实是一个int常量。那这个常量又是怎么来的呢?它其实代表的是Resources文件夹下的Layout文件夹下的Main.axml文件。Resources文件夹放置的是与程序相关的资源文件,如程序的icon图标(drawable文件夹内),布局文件(layout文件夹内)与常量值(values文件夹内)。当你生成程序时,Mono会把Resources下的这些文件夹分别编译为与文件夹同名的类作为Resource类的嵌套类,然后把文件中的文件名作为生成类的常量,并把xml文件中具有android:id这个属性的值作为Id类的常量。所以SetContentView(Resource.Layout.Main)实际上就是将Resources/Layout/Main.axml作为程序加载时的布局输出。布局文件是以xml格式编写的,Mono定义了一种新的文件格式:.axml,文件结构与xml文件一样,只不过在编辑文件时加入了针对android布局文件的智能提示:

MonoDroid学习笔记(三)—— 浅析Hello World程序及增添一些新的代码

布局文件中设置了一个Button 标签,用以配置按钮标签Widget,其内部设置的android:text属性是要显示的文字内容,引用”@string”里的Hello字符串常数。查看Resources/Values/strings.xml,字符串常数设置如下:

 

  1. <?xml version=“1.0” encoding=“utf-8”?>  
  2. <resources>  
  3.     <string name=“Hello”>Hello World, Click Me!</string>  
  4. </resources>  

<?xml version=”1.0″ encoding=”utf-8″?> <resources> <string name=”Hello”>Hello World, Click Me!</string> </resources>

 

其中“Hello”字符串的内容为“Hello World, Click Me!”,这就是我们在模拟器或手机上看见的按钮上的文字内容了。

 

    那么大家有没有想过,Mono是怎么知道程序一运行就以Activity1.cs为我们的主程序呢?仔细观察一下Activity1.cs的代码,发现Activity1这个类打有Activity这个特性,并且里面有个属性叫MainLauncher,值是true,那会不会就是以这个来识别的呢?为了验证这一想法,我们先来增加一个新的Activity,取名为Activity2,并且把这个MainLauncher也设为true,为了与Activity1的布局加以区分,我们在OnCreate中把按钮的文本修改一下,代码如下:

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. using Android.App;  
  7. using Android.Content;  
  8. using Android.OS;  
  9. using Android.Runtime;  
  10. using Android.Views;  
  11. using Android.Widget;  
  12.   
  13. namespace MonoDroidTest  
  14. {  
  15.     [Activity(Label = “My Activity”, MainLauncher = true)]  
  16.     public class Activity2 : Activity  
  17.     {  
  18.         protected override void OnCreate(Bundle bundle)  
  19.         {  
  20.             base.OnCreate(bundle);  
  21.   
  22.             // Create your application here   
  23.             SetContentView(Resource.Layout.Main);  
  24.   
  25.             // Get our button from the layout resource,   
  26.             // and attach an event to it   
  27.             Button button = FindViewById<Button>(Resource.Id.MyButton);  
  28.   
  29.             button.Text = “ojlovecd”;  
  30.         }  
  31.     }  
  32. }  

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; namespace MonoDroidTest { [Activity(Label = “My Activity”, MainLauncher = true)] public class Activity2 : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Create your application here SetContentView(Resource.Layout.Main); // Get our button from the layout resource, // and attach an event to it Button button = FindViewById<Button>(Resource.Id.MyButton); button.Text = “ojlovecd”; } } }

 

再次部署程序(希望你之前没有关掉模拟器,重新生成程序可以省去你再次启动模拟器的时间),结果程序一运行马上就抛出异常了,很自然就想到了,是由于Activity1和Activity2都有MainLauncher的原因,把Activity1的MainLauncher去掉,再次运行,好的,程序跑起来了,而且按钮的文本也变成了ojlovecd,看来我们的猜测没有错。而且不知道大家注意到没有,程序的名称也变成了My Activity

,可见程序的名称是由Label属性来指定的。

 

    好了,说完了MonoDroid程序基本结构之后,让我们对代码做小小的修改来结束这次的学习吧。在之前的范例运行结果,窗口的底色一律是深黑色的,这是SDK默认的颜色,要更改Activity里的窗口底色有很多方法,最简单的方法就是将颜×××码事先定义在资源文件中。

    首先在Values文件夹下新建一个color.xml,在里面加上如下内容:

 

  1. <?xml version=“1.0” encoding=“utf-8” ?>  
  2. <resources>  
  3.   <color name=“white”>#FFFFFFFF</color>  
  4. </resources>  

<?xml version=”1.0″ encoding=”utf-8″ ?> <resources> <color name=”white”>#FFFFFFFF</color> </resources>

 

然后重新生成项目,打开Main.axml,在LinearLayout节点中加上android:background属性购物网站大全,如下:

 

  1. <?xml version=“1.0” encoding=“utf-8”?>  
  2. <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
  3.     android:orientation=“vertical”  
  4.     android:layout_width=“fill_parent”  
  5.     android:layout_height=“fill_parent”  
  6.     android:background=“@color/white”  
  7.     >  
  8. <Button    
  9.     android:id=“@+id/MyButton”  
  10.     android:layout_width=“fill_parent”   
  11.     android:layout_height=“wrap_content”   
  12.     android:text=“@string/Hello”  
  13.     />  
  14. </LinearLayout>  

<?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:background=”@color/white” > <Button android:id=”@+id/MyButton” android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”@string/Hello” /> </LinearLayout>

 

重新运行程序,怎样,底色变白了吧~~~

MonoDroid学习笔记(三)—— 浅析Hello World程序及增添一些新的代码