Android学习——Activity

Activity


    活动代表了一个具有用户界面的单一屏幕,Android 的活动是ContextThemeWrapper 类的子类。

活动的生命周期

返回栈:Android是使用任务(task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈称作返回栈(Back Stack)。默认情况下,当我们启动了一个新活动,它会在返回栈中入栈,并处于栈顶位置;当我们按下Back健或调用finish()方法销毁一个活动时,处于栈顶的活动会出栈。系统总是会显示处于栈顶的活动给用户。

活动状态:运行、暂停、停止、销毁。

活动的生存期:
Activity 类定义了下面的方法,覆盖了活动生命周期的每一个环节:

方法
onCreate()在活动第一次创建时调用,完成活动初始化,如加载布局,绑定事件等;
onStart()在应用程序为用户可见时调用
onResume()在应用程序与用户开始可交互的时候调用;
onPause()当当前活动将要被暂停,上一个活动将要被恢复是调用;(被暂停的活动无法接受用户输入,不能执行任何代码。)
onStop()当活动不在可见时调用;
onDestroy()当活动被系统销毁之前调用;
onRestart()当活动被停止以后重新打开时调用。
活动的基本用法

一、注册活动
    一个应用程序可以有零个或多个活动,没有任何限制,而所有活动都需在AndroidManifest.xml中进行注册。
    活动的注册声明要放在<application>标签内,通过<activity>标签对活动进行注册。其次,为使程序在启动时知道应先启动哪个活动,我们还应配置主活动,即在(意图过滤)标签中声明MAIN动作和LAUNCHER类别。如:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity">
        </activity>
    </application>

</manifest>

除此,还可以使用android:label指定标题栏中的内容。

二、加载布局(layout)
    Android程序设计讲究逻辑和视图分离,最好每一个活动都能对应一个布局,布局就是来显示界面内容的。常将布局文件置于app/src/main/res/layout目录下。
    布局文件中声明了对应活动中使用的各种UI控件(如button,text等),并对其进行属性设置。如:

属性
android:id指定元素唯一标识
android:layout_width指定宽度,使用match_parent表示和父元素一样宽
android:layout_height指定高度,使用wrap_content表示高度只要能刚好包含里面内容。
android:text指定元素显示的文本内容

接着在活动的onCreate()方法中调用setContentView()方法加载布局。如:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
    }

三、菜单(Menu)与Toast
    在app/src/main/res/menu目录下增加菜单文件main,使用<item>标签添加菜单项,通过android:id指定标识符,android:title指定名称。如:

    <item
    android:id=”@+id/add_item”
    android:title=”Add” />

    接着回到该活动的java文件中重写onCreateOptionsMenu()方法,使用getMenuInflater().inflate()方法并返回true。然后重写onOptionsItemSelected()方法定义菜单响应事件。如:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.main,menu);
      return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()){
          case R.id.add_item:
              Toast.makeText(this,"Add",Toast.LENGTH_SHORT).show();
              break;
          case R.id.remove_item:
              Toast.makeText(this,"Remove",Toast.LENGTH_SHORT).show();
              break;
           default:
      }
      return true;
    }

    Toast是Android提供的一种非常好的提醒方式,可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,且不会占用任何屏幕空间。
    Toast的用法非常简单,通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来。用法如上。makeText()方法传入的3个参数:
一是Context,如活动;
二是文本内容;
三是Toast显示时长,有两个内置常量可以选择:Toast.LENGTH_SHORT、Toast.LENGTH_LONG。

四、使用Intent
1、显式Intent
    创建两个活动:FirstActivity、SecondActivity,其中FirstActivity为主活动,有一个按钮,id为button1。
使用Intent(Context packageContext,Class<<\?> cls)方法,构建一个intent,传入FirstActivity.this做上下文,SecondActivity.class作为目标活动,再使用startActivity()方法执行这个intent。如:

Button button1=(Button)findViewById(R.id.button1);
    button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
       startActivity(intent);
    }
});

这时,点击按钮可打开活动2的页面。

2、使用隐式intent
    隐式intent并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,交由系统去分析这个intent,并找出合适的活动。
    这时活动中<intent-filter>标签定义<action><category>就起了作用。<action>指明了当前活动可以响应的action,<category>更精确地指明了当前活动能够响应的intent中还可能带有的category。只有<action><category>中的内容同时能匹配上intent中指定的action和category时,这个活动才能响应该intent。
我们到AndroidManifest.xml文件中修改SecondActivity的<intent-filter>

        </activity>
        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.myapplication.ACTION_START"     />
                <category android:name="android.intent.category.DEFAULT"    />
                <category android:name="com.example.myapplication.MY_CATEGORY"    />
            </intent-filter>
        </activity>

然后修改FirstActivity中按钮的onClick()响应。

        Button button1=(Button) findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("com.example.myapplication.ACTION_START");
                intent1.addCategory("com.example.myapplication.MY_CATEGORY");
                startActivity(intent);
            }
        });

最后可以再New一个ThirdActivity观察效果,这里不再给出代码。

五、销毁活动
Activity类中提供了一个finish()方法。修改FirstActivity中按钮的onClick()响应。

        Button button1=(Button) findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               finish();
        });

这时,按钮效果与按BACK相同,都关闭了app。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值