活动—Activity
1、什么是活动?
活动:最吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。
2.1、活动基本用法
我们自己手动创建一个活动,先关闭上一个项目,点击导航栏File->Close Project。进入新建Android项目界面:
然后新建一个Android项目,项目名称可以叫做ActivityTest_1:
点击next,进入Target Android devices,选择默认。
继续点击next,进入手动创建项目类型,我们选择Add No Activity,点击完成:
等待项目创建成功后,软件默认使用Android模式的项目结构,这里我们手动改成Project模式:
目前Activity项目中虽然还是会自动生成很多文件,但是app/src/main/java/com.example.activitytest目录应该是空的,现在右击com.example.activitytest包->New->Activity->Empty Activity:
会弹出创建活动的对话框,活动命名为FirstActivity,且不要勾选Generate Layout File和Launcher Activity这两个选项:
勾选Generate Layout File表示会自动为FirstActivity创建一个对应的布局文件,勾选Launcher Activity表示会自动将FirstActivity设置为当前项目的主活动。勾选Backwards Compatibility表示会为项目启用向下兼容的模式。点击finish完成创建。
项目中的任何活动都应该重写Activity的onCreate()方法,而目前我们的FirstActivity中已经重写了这个方法,这是由Android Studio自动帮我们完成的。
package com.example.activitytest_1;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
可以看到,onCreate()方法非常简单,就是调用了父类的onCreate()方法。后面我们需要在里面加入很多自己的逻辑。
2.2、创建和加载布局
Android程序的设计讲究逻辑和视图分离,最好每一个活动都能对应一个布局,布局就是我们看到的APP界面。现在手动创建一个布局文件。右击app/src/main/res目录,然后对着layout目录右键->Layout resource file,会弹出一个新建布局资源文件的窗口,将这个布局文件命名为first_layout,根元素就默认选择为LinearLayout:
点击OK完成布局的创建,这时会看到下图的布局编辑器:
这时Android Studio为我们提供的可视化布局编辑器,切换至Text通过XML文件的方式来编辑布局,可以看到代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
由于我们刚才在创建布局文件时选择了LinearLayout作为根元素,因此现在布局文件中已经有一个LinearLayout元素了。现在我们天剑一个按钮,如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 1"
/>
</LinearLayout>
这里我们添加一个Button元素,并在Button元素内部添加了几个属性。android:layout_width指定了当前元素的宽度,这里使用match_parent表示让当前元素和父元素一样宽;android:layout_height指定当前元素的高度,这里使用wrap_content表示当前元素的高度只要能刚好包含里面的内容就行;android:text指定了元素中显示的文字内容。预览当前添加按钮后的布局:
回到FirstActivity,在onCreate()方法中加入如下代码:
package com.example.activitytest_1;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
}
}
可以看到,调用setContentView()方法来给当前的活动加载一个布局,而setContentView()方法中,我们一般都会传入一个布局文件的id。项目中添加的任何资源都会在R文件中生成一个相应的资源id,因此我们刚才创建的first_layout.xml布局的id现在应该添加到R文件中了。代码中引用布局文件的方法,只需调用R.layout.first_layout就可以得到first_layout.xml布局的id,然后将这个值传入setContentView()方法即可。
2.3、在AndroidManifest文件中注册
所有的活动都要在AndroidManifest.xml中进行注册才能生效,而实际上FirstActivity已经在AndroidManifest.xml中注册过了,我们打开app/src/main/Android-Manifest.xml文件看看:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activitytest_1">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".FirstActivity"></activity>
</application>
</manifest>
在标签中使用了android:name来指定具体注册哪个活动,这里填写的.FirstActivity是com.example.activity.FirstActivity的缩写。
这样只是仅仅注册了活动,要想程序运行,还需为程序配置主活动,就是说,当程序运行起来的时候,不知道首先启动哪个活动。配置主活动的方法就是在标签的内部加入标签,在标签里添加
2.4、在活动中使用toast
toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些消息会在一段时间后自动消失,且不会占用任何屏幕空间,就类似与输入密码错误了,会出现提示密码错误,请重新输入这一类的提醒消息。
首先需要定义一个弹出toast的触发点,界面上有个按钮,我们就让点击这个按钮的时候弹出一个toast。在onCreate()添加代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this, "you clicked Button 1",Toast.LENGTH_SHORT).show();
}
});
}
在活动中,可以通过findViewById()方法获取到在布局文件中定义的元素,这里我们传入R.id.button_1,来得到按钮的实例,这个值是刚才在first_layout.xml中通过android:id属性指定的。findViewById()方法返回的是一个View对象,我们需要向下转型将它转成Button对象。得到按钮的实例之后,我们通过调用setOnClickListener()方法为按钮注册一个监视器,点击按钮就会执行监听器中的onCreate()方法。因此弹出的toast的功能当然是要在onCreate()方法中编写了。
toast的用法非常简单,通过静态方法makeText()创建出一个toast对象,然后调用show()将toast显示出来就可以了。makeText()方法需要传入3个参数。第一个参数是Context,也就是toast要求的上下文,由于活动本身就是个context对象,因此这里直接传入FirstActivity.this即可。第二个参数是toast显示的文本内容。第三个参数是toast显示的时间长,有两个内置常量可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG