01_创建一个新的activity&activity配置清单文件
今天开始学四大组件。今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者。四大组件,咱们一天一个。Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面。创建多个Activity,在不同的页面之间进行跳转并且在不同的页面之间进行数据的传递。
创建一个新的Activity,想办法把它给打开。打开一个Activity就涉及到一个隐式意图和一个显式意图。intent,第二天的时候打电话,电话拨号器就用到了这个东西。
Activity的生命周期。讲Servlet的时候提到过生命周期的概念。说一下Activity的生命周期和它的生命周期方法究竟有什么用。
最后说一下Activity的任务栈。
Activity是四大组件里面最重要的一个组件。所以今天的内容需要全部掌握,都是非常重要的重点。必须全部掌握。
创建一个新的Activity。其实之前写代码的时候Activity实际上都不需要咱们创建。因为咱们默认勾上了帮咱们创建一个空的MainActivity。现在得自己创建一个新的Activity。
package com.itheima.createnewactivity; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载界面 解析xml文件 把xml文件中声明的控件 创建出对应的java对象
setContentView(R.layout.activity_main);
//new M
}
}
package com.itheima.createnewactivity; import android.app.Activity;
import android.os.Bundle; public class SecondActivity extends Activity {
//重写onCreate()方法
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);//第二个Activity对应的Java类已经写好了.
//findViewById(id)
//setOnClickListener
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> </RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#ff0000" android:text="我是第二个Activity" /> </RelativeLayout>
为什么要重写这个onCreate()方法?onCreate()什么时候执行这个还记得吗?第一天在讲电话拨号器的时候就提过这个。当我的Activity一创建的时候,这个对象创建起来之后系统就会帮助咱们调用onCreate()方法。所以在onCreate()方法中要做的就是跟初始化相关的操作。比如setContentView把界面初始化过来。比如findViewById(id)找到我需要操作的目标。比如说我给按钮设置点击事件,setOnClickListener。这些东西都要放在onCreate()里面。
不在AndroidManifest.xml里面配置一下是无法显示SecondActivity界面的。MainActivity在清单文件里面有一个activity节点。每创建出一个新的Activity如果你想用的话就必须在清单文件里面声明对应的Activity。为什么必须声明?需要注意的是所有的四大组件都不能自己去创建这个对象。
MainActivity也有无参的构造而且是public也可以去调,但是咱不能自己调。所有的四大组件的对象都需要系统帮助咱们创建。系统创建怎么创建?就是通过反射的方式。所以你必须在清单文件里面声明对应的节点。
SecondActivity第二个界面也已经声明完了。
问题出在清单文件里面activity节点的意图过滤器的那段代码。
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
意图过滤器如果你给它指定了一个action,这个叫MAIN.category有一个东西叫LAUNCHER.LAUNCHER是启动/发射.所以LAUNCHER这个东西是作为了一个启动器。如果你的一个Activity声明了这么一个intent-filter意图过滤器,它里面action是MAIN,category是LAUNCHER,那么这一个Activity就会作为应用的入口并且在桌面上放了一个图标。
为什么SecondActivty也是写MAIN和LAUNCHER,但是启动的是第一个MainActivity.因为MainActivity在前面,你一个应用那肯定只有一个入口。它这个PULL解析是一行一行来的,解析到<activity默认谁在前面谁就是启动器。但是呢桌面上这个图标确实给SecondActivity放了一个。
当前就比较诡异了,当前我这一个应用但是桌面上有两个图标。但是呢点击去的界面还不一样。正常的情况下所有的应用只有这么一个图标。但是有的设备上你即使这么写了它也不会帮你创建两个图标,它会自动地把第二个Activity过滤掉,默认只是第一个Activity起作用。但是只要有的设备可能会出现这个情况,那咱们就不能够这么做。
所以说每一个应用只能有一个Activity下配置这么一个intent-filter,就是action是MAIN,category是LAUNCHER.
应用的名字是application节点的android:label显示的.
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
如果application节点的android:label和下面的activity节点的android:label标签是一样的那就无话可说了。但是可以给activity节点指定一个特殊的android:label标签.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.createnewactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.createnewactivity.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.itheima.createnewactivity.SecondActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.createnewactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.createnewactivity.MainActivity"
android:label="第一个activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.itheima.createnewactivity.SecondActivity"
android:label="第二个activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
你作为启动界面的Activity它里面所配置的android:label,如果你这个没有配置的话它默认会找application.如果你配置了的话一定是用Activity的android:label.application的label是在应用管理器里显示的.
application的label在这里显示。
android:icon="@drawable/ic_launcher"
icon就是给它指定一个图标。如果在activity节点下你声明了android:icon和android:label,那么默认他使用的就是activity下的icon,如果你没声明的话他会去找application节点下的icon和label。
一个应用两个图标看起来是很诡异的。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.createnewactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.createnewactivity.MainActivity"
android:icon="@drawable/header1"
android:label="第一个activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.itheima.createnewactivity.SecondActivity"
android:icon="@drawable/header2"
android:label="第二个activity" >
<!--
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
-->
</activity>
</application> </manifest>
在activity和application节点里面咱们都可以去声明一个icon和一个label,如果它们俩都有默认使用activity里面,application这个最终就会展示到我的应用管理器,在那个位置上会看到application节点下声明的对应的内容。
01_创建一个新的activity&activity配置清单文件的更多相关文章
- Android 创建一个新的Activity
本文转载自:http://www.cnblogs.com/wuyudong/p/5658020.html 新建一个项目,创建一个java类,继承自Activity 新建一个Android.xml文件: ...
- 安卓入门 使用android创建一个项目 从启动activity中响应按钮事件 启动另一个activity 并传递参数
启动android studio创建一个新项目 public void sendMessage(View view){ Intent intent=new Intent(this,DispalyMes ...
- 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目
喜大普奔 10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...
- soapui中文操作手册(一)----创建一个新的项目
1) 创建一个新的项目 点击项目,选择新建项目SOAP.这将打开一个新的SOAP项目对话框. 注意:你也可以做CTRL + N(WIN)或CMD+ N(MAC)来创建一个新的SOAP项目. 在新的SO ...
- Eclipse中创建一个新的SpringBoot项目
在Eclipse中创建一个新的spring Boot项目: 1. 首先在Eclipse中安装STS插件:在Eclipse主窗口中点击 Help -> Eclipse Marketplace... ...
- Linux内核及分析 第六周 分析Linux内核创建一个新进程的过程
实验过程 1.github上克隆相应的mengning/menu.git 2.测试menuOS,测试fork直接执行结果 3.配置调试系统,进入gdb调试,利用file linux-3.18.6/vm ...
- 记一次oracle创建一个新数据库,并导入正式环境数据库备份的dmp包过程
背景:正式环境oracle数据库定时用exp备份一个dmp包,现在打算在一台机器上创建一个新数据库,并导入这个dmp包. 1.创建数据库 开始 -> 所有程序 -> Oracle -> ...
- Vue Create 创建一个新项目 命令行创建和视图创建
Vue Create 创建一个新项目 命令行创建和视图创建 开始之前 你可以先 >>:cd desktop[将安装目录切换到桌面] >>:vue -V :Vue CLI 3.0 ...
- Jersey 2.x 从Maven Archetype 创建一个新项目
创建 Jersey 工程需要使用 Apache 的 Maven 软件工程和管理工具.所有的Jersey产品模块都可以在 Maven中央库 中找到.这样的话 Jersey 可以非常容易和其他基于 Mav ...
随机推荐
- 【BZOJ1061】志愿者招募(单纯形,对偶性)
题意: 这个项目需要N 天才能完成,其中第i 天至少需要 Ai 个人. 布布通过了解得知,一共有M 类志愿者可以招募.其中第i 类可以从第Si 天工作到第Ti 天,招募费用 是每人Ci 元.新官上任三 ...
- 【POJ3294】Life Forms(后缀数组,二分)
题意: n<=100 len[i]<=1000 思路:这是一道论文题 ..]of longint; ch:..]of ansistring; n,n1,l,r,mid,last,i,j,m ...
- msp430项目编程24
msp430中项目---MMC接口 1.串行通信工作原理 2.串行通信协议 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习
- CodeForces 595A Vitaly and Night
水题. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> u ...
- 异常处理(try catch throw)详解(C++)
选择异常处理的编程方法的具体原因如下: 1.把错误处理和真正的工作分开来: 2.代码更易组织,更清晰,复杂的工作任务更容易实现: 3.毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了: 4 ...
- openwrt下载编译
1. 安装依赖包: yum install autoconf binutils bison bzip2 flex gawk gcc gcc-c++ gettext make ncurses-devel ...
- 支付宝移动支付之IOSApp调用支付宝钱包
近期客户提出要开发一个IOS上的app作为訪问他们站点的途径之中的一个.为什么说之中的一个呢.因为眼下PC和Mobile这两个站眼下都已经上线了. 所以问题就简单了,我们仅仅须要把mobile站UI改 ...
- CSDN管理员看过来
CSDN管理员看过来 你好.CSDN管理员,我想我被特殊对待了.我看了一些人的博客.终于发现仅仅有我博客的数据有异常.这算是给我的惊喜吗? 言归正传,我发现我博客上两个地方出现的文章的总数对不上.原创 ...
- 编程基础知识——Java JNI开发流程(2)
android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni.首先须要下载android ndk. 操作 ...
- Android四大组件与进程启动的关系(转)
一. 概述 Android系统将进程做得很友好的封装,对于上层app开发者来说进程几乎是透明的. 了解Android的朋友,一定知道Android四大组件,但对于进程可能会相对较陌生. 一个进程里面可 ...