活动(Activity)它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见。
创建 Activity
活动都应该重写 Activity 的 onCreate()方法
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
onCreate() 方法调用了父类的方法。这只是默认的实现,后面我们还需要在里面加入很多自己的逻辑。
创建和加载布局
布局文件的代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="pub.weber.bym.activitytest.MainActivity">
<Button
android:id="@+id/button_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 1"
/>
</LinearLayout>
重新回到 MainActivity 在 onCreate() 方法中 super.onCreate(savedInstanceState);
下面加入如下代码:
setContentView(R.layout.activity_main);
调用了 setContentView()方法来给当前的活动加载一个布局,而在setContentView()方法中,我们一般都会传入一个布局文件的 id。
在 AndroidManifest 文件中注册
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pub.weber.bym.activitytest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="第一个程序">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
android:label指定活动中标题栏的内容,标题栏是显示在活动最顶部。给主活动指定的 label 不仅会成为标题栏中的内容,还会成为启动器(Launcher)中应用程序显示的名称。
隐藏标题栏
在 setContentView(R.layout.first_layout);
这句的前面加上 requestWindowFeature(Window.FEATURE_NO_TITLE);
,意思就是不在活动中显示标题栏,注意这句代码一定要在 setContentView()之前执行,不然会报错。
在活动中使用 Toast
我们使用页面上的按钮来触发点击事件,然后弹出一个 Toast 。在 onCreate()方法中添加代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button_1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你点了按钮",Toast.LENGTH_SHORT).show();
}
});
}
在活动中,可以通过 findViewById()
方法获取到在布局文件中定义的元素,这里我们传入 R.id.button_1
,来得到按钮的实例,这个值是刚才在 activity_main.xml
中通过 android:id
属性指定的。findViewById()
方法返回的是一个 View
对象,我们需要向下转型将它转成Button
对象。得到了按钮的实例之后,我们通过调用 setOnClickListener()
方法为按钮注册一个监听器,点击按钮时就会执行监听器中的 onClick()
方法。因此,弹出 Toast
的功能当然是要在onClick()
方法中编写了。
Toast的用法非常简单,通过静态方法 makeText()
创建出一个 Toast对象,然后调用 show()
将 Toast 显示出来就可以了。这里需要注意的是,makeText()
方法需要传入三个参数。第一个参数是 Context,也就是 Toast 要求的上下文,由于活动本身就是一个 Context 对象,因此这里直接传入 MainActivity.this
即可。第二个参数是Toast显示的文本内容,第三个参数是Toast显示的时长,有两个内置常量可以选择 Toast.LENGTH_SHORT
和 Toast.LENGTH_LONG
。
在活动中使用 Menu
新建一个 menu 文件夹
右击 menu 文件夹 → New → Menu resource file
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_item"
android:title="添加" />
<item android:id="@+id/remove_item"
android:title="删除" />
</menu>
然后打开 MainActivity,重写 onCreateOptionsMenu()方法,代码如下
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
通过 getMenuInflater()
方法能够得到 MenuInflater
对象,再调用它的 inflate()
方法就可以给当前活动创建菜单了。inflate()
方法接收两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单,这里当然传入 R.menu.main
,第二个参数用于指定我们的菜单项将添加到哪一个 Menu对象当中,这里直接使用onCreateOptionsMenu()
方法中传入的 menu参数。然后给这个方法返回true,表示允许创建的菜单显示出来,如果返回了 false,创建的菜单将无法显示。
还要再定义菜单响应事件 ,在 MainActivity 中重写 onOptionsItemSelected()方法。
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"你点击了添加",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"你点击了删除",Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
在 onOptionsItemSelected()
方法中,通过调用 item.getItemId()
来判断我们点击的是哪一个菜单项,然后给每个菜单项加入自己的逻辑处理,这里我们就弹出一个 Toast。
销毁一个活动
只要按一下 Back 键就可以销毁当前的活动了。不过如果你不想通过按键的方式,而是希望在程序中通过代码来销毁活动,当然也可以,Activity 类提供了一个 finish()方法,我们在活动中调用一下这个方法就可以销毁当前活动了。
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});