欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

《第一行代码》第二章、探究活动

程序员文章站 2023-03-08 18:24:11
2.1图中若勾选Generate Layout File将自动为活动创建一个对应的布局文件,若勾选Launcher Activity将自动将活动设置为项目的主活动2.2.2setContentView(R.layout.layout_main);这个方法用来给当前活动加载一个布局,一般会传入一个布局文件的id,项目中添加的任何资源都会在R文件中生成一个相应的资源id,例如只需调用R.layout.layout_main就可以得到layout_main.xml布局文件的id2.2.3在Andro...

2.1
《第一行代码》第二章、探究活动
图中若勾选Generate Layout File将自动为活动创建一个对应的布局文件,若勾选Launcher Activity将自动将活动设置为项目的主活动

2.2.2

setContentView(R.layout.layout_main);

这个方法用来给当前活动加载一个布局,一般会传入一个布局文件的id,项目中添加的任何资源都会在R文件中生成一个相应的资源id,例如只需调用R.layout.layout_main就可以得到layout_main.xml布局文件的id

2.2.3在AndroidManifest文件中注册活动

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.coolweather.android">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/weather_logo"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

活动的注册声明要放在标签内,这里是通过标签来对活动进行注册的。android:name来指定具体注册哪一个活动,由于之前已经通过package属性指定了程序的包名,所以直接缩写成**.MainActivity**就行了
android:label指定活动中标题栏的内容,标题栏是显示在活动最顶部的,给主活动指定的label不仅会成为标题栏的内容,还会成为启动器中应用程序显示的名称。
2.2.4在活动中使用Toast
Toast用法非常简单,通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来就可以了。makeText()需要传入3个参数,上下文,显示内容,显示时长。

2.2.5在活动中使用Menu
如果活动中有大量的菜单展示,从而占用很大的屏幕空间,就可以使用Memu。
首先在res目录下新建一个memu文件夹,然后右击menu文件夹→New→Menu resource file,新建一个main的菜单文件。

<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>

标签创建具体的某一个菜单项,通过android:id给这个菜单项指定一个唯一标识符,通过android:title给菜单项指定一个名称。
然后在活动代码中调用onCreateOptionMenu()方法

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

通过getMenuInflater()方法能够得到MenuInflater对象,在调用它的inflate()方法给活动创建菜单,inflate()方法接收两个参数,第一个指定用哪个资源文件创建菜单,第二个参数指定我们的菜单项将添加到哪一个Menu对象中,然后给方法返回true,表示允许创建的菜单显示出来,返回false,创建的菜单将无法显示。
之后再调用public boolean onOptionsItemSelected(MenuItem item)方法来定义菜单项的响应事件,可以通过item.getIemId()判断是点击了哪一个菜单项。
标题栏的右边三点的符号就是菜单按钮。

2.2.6销毁一个活动
1.Back键可以销毁当前的活动
2.Activity类提供了finish()方法,再活动中调用这个方法,就可以销毁当前活动

2.3Intent
Intent可以用于启动活动、启动服务和发送广播等场景

2.3.1使用显示Intent

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

这段代码表示在FirstActivity活动的继承上打开SecondActivity这个活动。
通过Intent(Context packageContext,Class<?> cls),构建出Intent对象,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。startActivity()方法专门用于启动活动,它接收一个Intent参数。

2.3.2使用隐式Intent
隐式Intent并不明确指出我们想要启动哪个活动,而是制定了一系列更为抽象的action和category等信息。然后交由系统分析这个Intent,并帮我们找出合适的活动去启动。

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

在Manifest中标签下配置的内容,可以指定当前活动能够响应的action和category。只有和中的内容同时能够匹配Intent中指定的action和categoty时,这个活动才能响应该Intent。如下:

button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);
            }
        });

这样就可以启动响应com.example.activitytest.ACTION_START的活动了,因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。

2.3.4向下一个活动传递数据
Intent还可以在启动活动的时候传递数据。
例如将SecondActivity中的数据传递到ThirdActivity中,可以这样写。

button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            String data="Hello SecondActivity";
                Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
                intent.putExtra("extra_data",data);
                startActivity(intent);
            }
        });

然后在ThirdActivity中取出数据。

public class ThirdActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.third_layout);
        Intent intent=getIntent();
        String data=intent.getStringExtra("extra_data");
        Log.d("SecondActivity",data);
    }
}

2.3.5返回数据给上一个活动
Activity中有一个startActivityForResult()方法也是用于启动活动的,但是这个方法期望活动在销毁的时候能够返回一个结果给上一个活动。这个方法接收两个参数,第一个参数还是Intent,第二个参数是请求码。

2.4.3活动的生存期
onCreate():在活动第一次被创建的时候调用
onStart():在活动由不可见变为可见的时候调用
onResume():在活动准备好和用户进行交互的时候调用
onPause():这个方法在系统准备去启动或者恢复另一个活动的时候调用
onStop():在活动完全不可见的时候调用
onDestroy():在活动被销毁之前调用,之后活动的状态将变为销毁状态
onRestart():在活动由通知状态变为运行的时候调用

本文地址:https://blog.csdn.net/yishengzhipiaobo/article/details/107132536