1、手动创建活动
(1)public表示公开的类,所有的类都可引入使用。
(2)class FirstActivity extends Activity表示FirstActivity类继承自Activity 类。
(3)@Override表示下边的方法是继承父类的方法,对其覆盖
(4)protected表示此方法能被同一包中的类或不同包的子类所调用
(5)onCreate方法的参数是一个Bundle类型的参数。Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的。从字面上savedInstanceState,是保存实例状态的。实际上,savedInstanceState也就是保存Activity的状态的。那么,savedInstanceState中的状态数据是从何处而来的呢?下面我们介绍Activity的另一个方法saveInstanceState。
onsaveInstanceState方法是用来保存Activity的状态的。当一个Activity在生命周期结束前,会调用该方法保存状态。这个方法有一个参数名称与onCreate方法参数名称相同。 在实际应用中,当一个Activity结束前,如果需要保存状态,就在onsaveInstanceState中,将状态数据以key-value的形式放入到savedInstanceState中。这样,当一个Activity被创建时,就能从onCreate的参数savedInsanceState中获得状态数据。状态这个参数在实现应用中有很大的用途,比如:一个游戏在退出前,保存一下当前游戏运行的状态,当下次开启时能接着上次的继续玩下去。再比如:电子书程序,当一本小说被阅读到第199页后退出了(不管是内存不足还是用户自动关闭程序),当下次打开时,读者可能已忘记了上次已阅读到第几页了,但是,读者想接着上次的读下去。如果采用saveInstallState参数,就很容易解决上述问题。 (6)super关键字表示调用父类的方法
public class FirstActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }}
2、创建和加载布局
(1)LinearLayout是根元素(是一种布局)。关于 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 解析参考http://blog.csdn.net/qingkongyeyue/article/details/52688502 (2)android:layout_width="match_parent"这里android是包名,而layout_width是指属性 (3)Button是一个新添的元素, android:id="@+id/button_1"这里的@+id 就是给控件添加一个id 这个新的id会自动生成在 R.java文件里面,就能在你的Activity里面通过这个id来引用对象了 。如果你写成是@id/aaa则是代表引用id列表里面的aaa的值。 (4)wrap_content match_parent wrap_content表示让当前控件的大小能够刚好包含住里面的内容。match_parent表示当前控件大小和父布局的大小一样<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button 1" /> </LinearLayout> 3、在活动中加载布局
(1)下面只解析setContentView(R.layout.first_layout);setContentView()方法来给当前的活动加载一个布局,而在setContentView()方法中,我们一般都会传入一个布局文件的id。在第一章介绍gen目录的时候我有提到过,项目中添加的任何资源都会在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 文件,千万别使用错。
public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); } }
4、在AndroidManifest文件中注册 (1) 所有的活动都要在AndroidManifest.xml中进行注册才能生效,那 么我们现在就打开AndroidManifest.xml来给FirstActivity注册吧. (2) <uses-sdk是对所使用的sdk进行设置, SDK:(software development kit)软件开发工具包, 应用程序可以运行的API (3)application标签里面 label表示标签,@表示引用,@string/app_name就是从string这个文件中引用叫app_name的这个键值对的值,作用是为你当前的ViewGroup设置一个标签 (4)android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
如果存在多个activity都声明了android.intent.action.MAIN与android.intent.category.LAUNCHER会出现什么情况呢?------------------将会有多个图标显示在桌面上。
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> 代码如下所示: <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> 5、隐藏标题栏 (1)requestWindowFeature(Window.FEATURE_NO_TITLE)的意思就是不在活动中显示标题栏,其中Window是枚举名,FEATURE_NO_TITLE是枚举值 隐藏的方法非常简单,打开FirstActivity,在onCreate()方法中添加如下代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); } 6、在活动中使用Toast
(1)是Android系统提供的一种非常好的提醒方式, 在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间 )
(2)Button button1 = (Button) findViewById(R.id.button_1);
这句话代表你将要给一个Button类型的变量赋值,赋的值为通过findViewById函数返回的值。这里的R.id.button_1表示你在Android界面菜单内拖出来的一个新的按钮,编译器会自动给这个按钮一个编号。findViewById函数就是通过这个编号准确定位这个按钮,执行你想要对它进行的操作。 至于button1.setOnClickListener(this);,代表我们要给这个按钮设置一个监听器。什么是监听器呢?监听器就是负责监控按钮运行的工具。这个OnClickListener就是负责监听用户是否按下这个按钮的。
(3)makeText()方法得到的对象调用show()方法,show()方法调用对像的属性
Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
代码如下所示:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show(); } }); } 7、在活动中使用menu
(1)新建菜单,<item>标签用来创建具体的某一个菜单项,
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/add_item" android:title="Add"/> <item android:id="@+id/remove_item" android:title="Remove"/> </menu> 8、销毁一个活动
(1)在监听方法中调用finish()方法
修改按钮监听器中的代码,如下所示: button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } });