【安卓开发】【二】活动Activity

一、手动创建Activity

1.找到项目包的位置:app/src/main/java/com.xxxx.xxx目录

右键包->New->Activity->Empty Activity


取消Generate Layout File和Launcher Activity,第一个是创建一个对应的布局,第二个是将这个新创建的Activity默认为当前项目的主活动。

    

创建一个新的Activity都会默认重新父类的OnCreate()方法

package com.movieproject.yj.mproject;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

二、创建布局

右击app/src/main/res目录->New->Directory


创建一个layout目录


创建一个新的布局:New->Layout resource file



Design是当前可视化布局编辑器,可以浏览布局以及拖放编辑布局。

Text是通过XML文件的方式来编辑布局


加入一个button元素,match_parent表示让当前元素和父元素一样宽,wrap_content表示当前元素的高度只要能刚好包含里面的内容就好

<?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:id="@+id/button_01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 1"
        />
</LinearLayout>
在android上基本不用拖动的方式来布局的,这对你以后没什么好处。还是老老实实学习xml布局吧,以后你就知道为什么拖不可取了。

然后我们在MainActivity中SetContentView(),设置成R.layout.first_layout,调用这个方法来给当前的活动加载一个布局

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
    }
}

三、AndroidManifest文件中注册活动

1.所有的活动都要在这个xml中进行注册才能生效

在Activity标签中我们使用android:name来指定具体注册哪个Activity,这里的.MainActivity就是我们要注册的,其实这是com.example.activitytest.MainActivity的缩写,因为前面包名已经通过package指定的,所以可以省略掉

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

    <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" />
    </application>

</manifest>

2.我们现在需要将这个Activity设置成主活动

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

    <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="This is FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    </application>

</manifest>

我们可以通过运行键来看我们的运行结果


如果没有虚拟设备的话,需要按照提示安装一个,跟装AndroidSDK差不多


四、使用Toast

Toast是Android系统提供的一个非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        Button button1 = (Button) findViewById(R.id.button_01);
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

五、使用Menu

1.首先在res目录下新建一个menu文件夹,再在menu文件夹下新建一个叫做main的菜单文件

右键->New->Menu resource file



加上一些item标签,如下:

<?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="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>
</menu>

2.接着回到MainActivity中去重写OnCreateOptionsMenu()方法,快捷键Ctrl+O


public class MainActivity extends AppCompatActivity {

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

getMenuInflater()方法能够得到MenuInflater对象,调用inflate()方法就可以给当前活动创建菜单了。这个方法两个参数:第一个用于指定我们通过哪一个资源文件夹创建菜单,第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中。返回值true表示允许创建的菜单显示出来,反之则不显示。

3.重写OnOptionsIntemSelected()方法

public class MainActivity extends AppCompatActivity {

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

六、销毁一个活动

1.一个简单的做法,按Back键就可以销毁当前的活动了

2.通过代码调用finish()方法也是一样的

        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                finish();
            }
        });

七、显式Intent

创建一个新的活动


这样默认的就会创建出一个新的活动以及布局,同时代码中会使用这个布局,然后我们的AndroidManifest.xml也会自动生成这个活动的配置


    <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="This is 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>

接下来进入主题:Intent

Intent是安卓程序中各组件之间进行交互的一种重要方式,不仅可以致命当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。

Intent大致可分为两种:显式Intent和隐式Intent

Intent哟u多个构造函数,new Intent(Context context,Class cls),第一个参数Context表示提供一个启动活动的上下文,第二参数Class则是指定想要启动的目标活动,然后通过Activity类中的startActivity()方法进行活动的跳转

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

七、隐式Intent

Intent的用法更多的事隐式用法

1.通过action和category打开一个活动

打开AndroidManifest.xml,设置secondActivity的属性

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="hahaha.exsample.com.activityapplication.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("hahaha.exsample.com.activityapplication.ACTION_START");
                //category 默认就是DEFAULT,所以不需要再次指定了
                startActivity(intent);
            }
        });

2.指定多个category

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="hahaha.exsample.com.activityapplication.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="hahaha.exsample.com.activityapplication.MY_CATEGORY" />
            </intent-filter>
        </activity>
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("hahaha.exsample.com.activityapplication.ACTION_START");
                intent.addCategory("hahaha.exsample.com.activityapplication.MY_CATEGORY");
                startActivity(intent);
            }
        });

3.打开网址

        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("https://www.jd.com/"));
                startActivity(intent);
            }
        });

我们还可以在<intent-filter>标签中再设置一个<data>标签,用于更精确地指定当前活动能够相应什么类型的数据,<data>标签可以配置一下内容:

android:scheme用于指定数据的协议部分,比如http

android:host用于指定数据的主机名部分,比如www.baidu.com

android:port用于指定数据的端口部分,一般紧随在主机名之后

android:path用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容

android:mimeType用于指定可以处理的数据类型,允许使用通配符的方式进行指定

只有<data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该Intent

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
            </intent-filter>
        </activity>

直接通过之前方法打开这个活动

        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("android.intent.action.VIEW");
                startActivity(intent);
            }
        });

除了http协议外,我们还可以指定很多其他协议,比如geo表示显示地理位置、tel表示拨打电话。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值