Activity(活动)-初讲
是一种可以包含用户界面的组件,主要用于和用户进行交互。
上一次我们的MainActivity.java 是ADT帮我们自动创建的。手动创建Activity可以加深我们的理解和记忆,于是我们先自己手动创建一个Android项目, 项目名 : ActivityTest , 包名 : 使用默认值 com.example.activetest 。既然要手动创建的话,那么就不要勾选Create Activity 这个选项。
这时,Eclipse中就有多个项目了。现在可以把其它项目 关闭: 右击 项目 -->Close project . 启用 : 双击 项目
现在我们开始写 Activity
目前 ActivityTest项目的 src目录应该是空的,你应该在 src目录下先添加一个包。点击 Eclipse 导航栏中的 File→New→Package,在弹出窗口中填入我们新建项目时使用的默认包名com.example.activitytest,点击 Finish. 右击 com.example.activitytest 包→New→Class,会弹出新建类的对话框,我们新建一个名为 FirstActivity 的类,并让它继承自 Activity,点击 Finish 完成创建。或者可以自己手写继承Activity :
1 import android.app.Activity; 2 import android.os.Bundle; 3 4 public class FirstActivity extends Activity{ 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 9 super.onCreate(savedInstanceState); 10 11 } 12 }
创建和加载布局
上一个项目我们 onCreate() 中 写到 setContentView(R.layout.activity_main.xml) ; 就是添加窗口页面布局。现在我们手动创建一个布局。
右击 res/layout 目录→New→Android XML File,会弹出创建布局文件的窗口。我们命名为 :first_layout.xml ,根元素就默认选择为 LinearLayout
在命名的时候会有一些限制 小写开头,只能是0-9、a-z
点击 Finish 完成布局的创建,看到我们的布局是:
这是 ADT 为我们提供的可视化布局编辑器,你可以在屏幕的中央区域预览当前的布局。在窗口的最下方有两个切换卡,左边是 Graphical Layout,右边是 first_layout.xml。Graphical Layout 是当前的可视化布局编辑器,在这里你不仅可以预览当前的布局,还可以通过拖拽的方式编辑布局。
由于我们刚才在创建布局文件时选择了 LinearLayout 作为根元素,因此现在布局文件中已经有一个 LinearLayout 元素了。那我们现在对这个布局稍做编辑,添加一个按钮,如下所示:
现在我们添加一个Button 按钮
你可能会对 @+id/button_1 这种语法感到陌生,但如果把加号去掉,变成@id/button_1,这你就会觉得有些熟悉了吧,这不就是在 XML 中引用资源的语法吗,只不过是把 string 替换成了 id。
-
- android:layout_width 指定了当前元素的宽度
- android:layout_height 指定了当前元素的高度
- android:text 指定了元素中显示的文字内容
- wrap_content 表示当前元素的宽、高度只要能刚好包含里面的内容就行
我们可以把 layout_width 的值 改为 :match_parent (当前元素和父元素一样宽),看看效果:
重新回到 FirstActivity,在 onCreate()方法中加入如下代码:
1 public class FirstActivity extends Activity{ 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.first_layout); 8 9 } 10 } 11
项目中添加的任何资源都会在 R文件中生成一个相应的资源 id,因此我们刚才创建的 first_layout.xml布局的 id现在应该是已经添加到 R文件中了。在代码中去引用布局文件的方法你也已经学过了,只需要调用 R.layout.first_layout就可以得到 first_layout.xml布局的 id,然后将这个值传入 setContentView()方法即可。注意这里我们使用的 R,是com.example.activitytest 包下的 R 文件,Android SDK 还会自动提供一个 android 包下的 R 文件。
当然,做了这些还不够。所有的活动都要在 AndroidManifest.xml 中进行注册才能生效,那么我们现在就打开 AndroidManifest.xml 来给 FirstActivity 注册吧:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activitytest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name=".FirstActivity" android:label="This is FirstActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
活动的注册声明要放在<application>标签内,这里是通过<activity>标签来对活动进行注册的。首先我们要使用 android:name 来指定具体注册哪一个活动,那么这里填入的.FirstActivity是什么意思呢?其实这不过就是 com.example.activitytest.FirstActivity的缩写而已。由于最外层的<manifest>标签中已经通过 package属性指定了程序的包名是com.example.activitytest,因此在注册活动时这一部分就可以省略了,直接使用.FirstActivity就足够了。然后我们使用了 android:label 指定活动中标题栏的内容,标题栏是显示在活动最顶部的,待会儿运行的时候你就会看到。需要注意的是,给主活动指定的 label不仅会成为标题栏中的内容,还会成为启动器(Launcher)中应用程序显示的名称。之后在<activity>标签的内部我们加入了 <intent-filter> 标签,并在这个标签里添加了<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />。想让 FirstActivity 作为我们这个程序的主活动,即点击桌面应用程序图标时首先打开的就是这个活动,那就一定要加入这两句声明。另外需要注意,如果你的应用程序中没有声明任何一个活动作为主活动,这个程序仍然是可以正常安装的,只是你无法在启动器中看到或者打开这个程序。这种程序一般都是作为第三方服务供其他的应用在内部进行调用的,如支付宝快捷支付服务。
再在后面加上一下代码:
1 btn1 = (Button) findViewById(R.id.button1); 2 btn1.setText("点我看看"); 3 btn1.setOnClickListener(new OnClickListener() { 4 5 @Override 6 public void onClick(View v) { 7 8 //Toast.makeText(context, text, duration) 9 //context 上下文 Activity 10 //text 文本内容 11 Toast t = Toast.makeText(MainActivity.this,"你好,Android 1 班" , Toast.LENGTH_LONG); 12 t.show(); 13 } 14 });
运行后效果是,点击之后显示 你好,Android 1 班 :
最后,谢谢大家的关注。花开堪折直须折,莫待无花空折枝