重识Activity—Activity的基本使用

2019-04-16  本文已影响0人  Android_程序媛

最近在梳理Android知识的技能点,感觉有好多知识点在工作过程中没有用到,就渐渐忘记了,现在又重新梳理,做个记录,方便以后查阅。也算是对自己这几年工作的一个知识总结。
从Android最基础开始,今天主要分享Activity的基础知识,后续会更新一系列关于Activity的文章。

简介Activity

Activity是Android四大组件之一,主要用于和用户进行交互,例如:打电话,照相,查看地图等。Activity可以理解为用户交互的窗口,这个窗口可以铺满整个屏幕,也可以小于整个屏幕浮在另一个窗口上面,大多数App都是由多个Activity组成。应用除了可以访问自己的Activity,还可以访问其他App中被允许访问的Activity。

创建Activity

public class MainActivity extends AppCompatActivity {

    //重写onCreate()方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);//这一行必须有,否则会报错
        setContentView(R.layout.activity_main);//加载布局
    }
}

配置Activity

创建完Activity后,需要在AndroidManifest.xml文件中注册,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myfirstapplication">

    <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/TitleBarStyle">
        <!--Activity注册-->
        <activity android:name=".MainActivity">
        </activity>
    </application>

</manifest>

其中,<activity></activity>标签是对我们创建的Activity的注册。上述代码中是对Activity最简单的注册,只标注它的name即可。属性android:name的值是 包名.我们创建的Activity类名,上述代码中,该属性的值是“.MainActivity”是简写,因为在<manifest></manifest>标签中已经声明属性package的值是“com.example.myfirstapplication”,当然这里也可以写成完整的值,即“com.example.myfirstapplication.MainActivity”。

注意:创建Activity后,一定要在AndroidManifest.xml配置文件中注册Activity,否则会报错:ActivityNotFoundException。

ActivityNotFoundException.png

启动Activity

Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);//启动activity,不带返回值
public void launchSecond(View view){
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivityForResult(intent,1);//启动Activity,并带有请求码
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    switch (requestCode){
        case 1:
            if(resultCode == RESULT_OK){
                String returnData = data.getStringExtra("data_return");
                Log.d("Alisa",returnData);
            }
            break; 
        }
    }

SecondActivity.java中的代码:

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);

        findViewById(R.id.button_2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return","Hello MainActivity");
                setResult(RESULT_OK,intent);//专门用于向上一个活动返回数据
                finish();
            }
        });

    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("data_return","Hello MainActivity");
        setResult(RESULT_OK,intent);//专门用于向上一个活动返回数据
        super.onBackPressed();
    }
}

关闭Activity

关闭Activity,一般是由系统操作的,但是如果我们确定用户不再返回到此Activity,我们可以通过两种方式关闭。

if(isFinishing()){
    finish();
}

Activity隐藏标题栏

requestWindowFeature(Window.FEATURE_NO_TITLE);

上述代码的意思是在Activity中不再显示标题栏,必须在setContentView()方法之前调用,否则会报错:RuntimeException。

RuntimeException.png

注意:该方法只能在我们创建的子类是继承除AppCompatActivity之外的Activity中使用,如果子类继承的是AppCompatActivity,不起任何作用。

<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/TitleBarStyle">
        <!--Activity注册-->
        <activity android:name=".MainActivity"
            android:theme="@style/TitleBarStyle">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

styles.xml文件中自定义Style:

<style name="TitleBarStyle" parent="AppTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="windowNoTitle">true</item>
</style>

说明:

  1. 如果只是让某个Activity隐藏标题栏,那么在注册的<activity />中的属性android:theme设置值为我们自己自定义的style:“@style/TitleBarStyle”,未设置的Activity还是展示标题栏的;
  2. 如果是整个App都要求隐藏标题栏,则在<application />标签中的属性android:theme设置值为我们自己自定义的style:“@style/TitleBarStyle”;
  3. windowNoTitle是appcompat-v7中的属性,所以,如果子类继承AppCompatActivity,使用该属性,属性值设置为true;
  4. android:windowNoTitle代表的是系统的属性。除了子类继承的是AppCompatActivity外的其他Activity使用该属性,属性设置为true;
  5. 在子类继承AppCompatActivity时,如果windowNoTitleandroid:windowNoTitle都设置为false,将展示两个标题栏;
  6. 如果在自定义style时,同时将windowNoTitleandroid:windowNoTitle都设置为true,这样不管继承的是哪个Activity,都可以隐藏标题栏。

Activity设置label

<activity />中如果不设置属性label,那么默认展示的是<application />中设置的label属性值,如果设置label属性,则展示设置的label值,说明<activity />中的属性label优先级比<application />的高。

以上,就是我整理的关于Activity的基本使用的知识,后续会继续整理关于Activity的系列文章,请大家继续关注!

上一篇下一篇

猜你喜欢

热点阅读