探究Activity(1)--Activity的基本用法
一、Activity是什么
Activity(活动)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中应该包括零个或多个Activity。
二、Activity的基本用法
1、手动创建活动
(1)、重新创建一个项目,模板改成Add NoActivity
(2)、项目创建成功之后,仍然会默认使用Android模式的项目结构,这里我们手动改成Project模式。
右击–》New–》Activity–》Empty Activity,会弹出这样的一个框
(3)、这里跟之前创建程序差不多,需要注意的是不要勾选Generate Layout File和Launcher Activity这两个选项
勾选Generate Layout File表示会自动为FirstActivity创建一个对应的布局文件,勾选Launcher Activity表示会自动将FirstActivity设置为当前项目的主活动。第一次使用不需要勾选。勾选Backward Compatibility表示会为项目启用向下兼容的模式。
(4)、项目中的任何活动都需要重写Activity中的onCreate()的方法,目前我们已经重写了这个方法。这是由Android Studio自动帮我们完成的。代码如下:
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
可以看到,onCreate()方法非常简单,就是调用了父类的onCreate()方法。当然这只是默认的实现,后面我们还可以加上很多自己的逻辑。
2、创建和加载布局
Android程序的设计讲究逻辑和视图分离,最好每一个活动都能对应一个布局,布局就是用来显示界面内容的,因此我们现在手动创建一个布局文件
(1)、右击app/src/main/res目录–》New–》Directory,会弹出一个新建目录的窗口,这里先创建一个名weilayout的目录,然后对着layout目录右键–》Layout resource file,又会弹出一个新建布局资源文件的窗口。
(2)、上图是Android Studio为我们提供的可视化布局编辑器,你可以在屏幕的中央区域预览当前的布局。在窗口的最下方有2个切换卡,左边是Design,右边是Text。Design是当前的可视化布局编辑器,在这里你不仅可以预览当前的布局,还可以通过拖放的方式编辑布局。而Text则是通过XML文件的方式来编辑布局
(3)、我们拖一个button控件到Design界面,然后在活动中加载这个布局。
回到FirstActivity界面,在onCreate()方法中加入如下代码:
setContentView(R.layout.first_layout);
(4)、调用setContentView()方法来给当前的活动加载一个布局,而在setContentView()方法中,我们一般都会传入一个布局文件的id(项目中添加任何的资源都会在R文件中生成一个相对应的资源id)。我们在代码中引用文件只需要调用R.layout.first_layout就可以得到first_layout布局的id,然后在将这个传入setContentView()方法中
3、在AndroidManifest文件中注册
所有的活动都需要在AndroidManifest注册才能生效,而实际上FirstActivity已经在AndroidManifest.xml中注册过了,我们打开app/src/main/AndroidManifest.xml文件可以看到如下代码:
可以看到,活动的注册声明都要放在标签内,这里通过标签来对活动进行注册。那么是什么帮我们自动完成对FristActivity活动的注册呢?当然是AndroidStudio了。之前使用Eclipse创建活动或其他系统组件的时,很多人都会忘记去AndroidManifest.xml注册一下,从而导致程序运行崩溃。
在标签中我们使用了Android:name来指定具体注册哪一个活动,那么这里填入的.FirstActivity是什么意思?其实这不过即使com.example.activity.FirstActivity的缩写而已。由于最外层的标签中已经通过packet属性指定了程序的包名是什com.example.Activitytest,因此在注册活动时这一部分就可以省略了,直接使用.FirstActivity就可以了。
不过,仅仅是这样注册了活动,我们的程序仍然是不能运行的,因为还没有为程序配置主活动,也就是说,当程序运行起来的时候,不知道首先要启动那个活动。
添加主活动的方法:
(1)、在标签的内部加上标签,并在这个标签里加上和这两句声明即可。
(2)、使用android:label指定活动中标题栏的内容,标题栏是显示在活动的最顶部的,运行的时候就会看到。需要注意的是:给主活动指定的label不仅会成为标题栏中的内容,还会成为启动器(Launcher)中因公程序显示的名称。
修改后的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=".FirstActivity"
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>
这样的话,FirstActivity就成为我们这个程序的主活动了,即点击桌面应用程序图标时应首先打开的就是这个活动。另外需要注意,如果你的应用程序中咩有声明任何一个活动作为主活动,这个程序仍然是可以正常安装的,只是你无法再启动中看到或者打开这个程序。这种程序一般都是作为第三方服务供其他应用在内部进行调用的,如支付宝快捷支付服务。
4、在活动中使用Toast
Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。
如何使用Toast
首先需要定义一个弹出Toast的触发点,正好之前程序界面上有一个button,我们可以让点击这个按钮的时候弹出一个Toast。在OnCreate()方法中添加如下代码:
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this, "You clicked Button", Toast.LENGTH_SHORT).show();
}
});
}
}
在活动中,可以通过findViewById()方法获取到在布局文件中定义的元素,这里我们传入R.id.button2,来得到按钮的实例,这个值是刚才在first_layout.xml中通过android:id
属性指定的。findViewById()方法返回的是一个View对象,我们需要向下转型将它转成Button对象。得到那妞的实例之后,我们通过调用setOnClick()方法。因此,弹出Toast的功能当然是要在按键的单击事件中去编写。
Toast的用法非常简单,通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来就可以了。
这里需要注意的是,makeText()方法需要传入3个参数。
第一个参数是Context,也就是Toast要求的上下文,由于活动本身就是一个Context对象这里直接传入FirstActivity.this即可。
第二个参数是Toast显示的文本内容。
第三个参数是Toast显示的时长,有两个内置常量可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG。
5、在活动中使用Menu
(1)、首先在res目录下新建一个menu文件夹,右击res目录–》New–》Directory,输入文件夹名menu,点击OK。然后在这个文件夹下再新建一个名叫main的菜单文件,右击menu文件夹–》New–》Menu resource file
(2)、在main.xml中添加代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add_iten"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
这里我们创建2个菜单项,其中标签就是用来创建具体的某一个菜单项,然后通过android:id给这个菜单项指定一个唯一的标识符,通过android:title给这个菜单项指定一个名称。
(3)、重新回到FirstActivity中来重写onCOptionMenu()方法,重写方法可以使用ctrl+O快捷键
添加代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
通过getMenuInflater()方法能够得带MenuInflater对象,再调用它的的inflate()方法就可以给当前活动创建菜单了。Inflate()方法接收2个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单,这里当然传入R.menu.main。第二个参数用于指定我们的菜单项将添加到哪一个指定的Menu对象当中,这里直接使用onCreateOptionMenu()方法中传入的menu参数。然后给这个方法返回ture,表示允许创建的菜单显示出来。如果返回了false,创建的菜单将无法显示。
(4)、当然,仅仅让菜单显示出来是不够的,我们定义菜单不仅是为了看的,关键是要菜单真正可用才行,因此还要再定义菜单响应事件。在FirstActivity中重写onOptionItemSelectd()方法:
代码如下:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_iten:
Toast.makeText(this,"You Click Add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT ).show();
break;
default:
}
return true;
// return super.onOptionsItemSelected(item);
}
运行程序会看到标题栏多了一个三点的符号的,这就是菜单按钮了
6、销毁一个Activity
方法1:按一下Back键就可以销毁当前的活动了。
方法2:在Activity类中提供了一个finish()方法,我们在活动中调用一下这个方法就可以销毁当前的活动了
@Override
public void onClick(View v) {
finish(); //j结束当前活动
// Toast.makeText(FirstActivity.this, "You clicked Button", Toast.LENGTH_SHORT).show();
}
附件列表
探究Activity(1)--Activity的基本用法的更多相关文章
- this Activity.this Activity.class
1. this 与 Activity.this this是你当前对象的引用,在你的例子中你肯定在内部类ClickEvent里面实现intent,他指向的是ClickEvent,而不是你要传入的Acti ...
- Tasks、 activity 及 activity stack
一. Activity的四种加载模式 Activity之间的跳转,或者说加载一个新的Activity,一般对于开发者来说,都不是一个太难的问题.直到后来随着不断的深入,才发现原来Activity的加载 ...
- Android群英传》读书笔记 (4) 第八章 Activity和Activity调用栈分析 + 第九章 系统信息与安全机制 + 第十章 性能优化
第八章 Activity和Activity调用栈分析 1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重 ...
- Android群英传笔记——第八章:Activity与Activity调用栈分析
Android群英传笔记--第八章:Activity与Activity调用栈分析 开篇,我们陈述一下Activity,Activity是整个应用用户交互的核心组件,了解Activity的工作模式,生命 ...
- Tasks、 activity 及 activity stack - 人间奇迹(转)
http://www.cnblogs.com/yaozhongxiao/p/3365345.html Activity之间的跳转,或者说加载一个新的Activity,一般对于开发者来说,都不是一个 ...
- Android提升篇系列:Activity recreate(Activity 重新创建/自我恢复)机制(一)
注:本文中的recreate是指当内存不足时,Activity被回收,但再次来到此Activity时,系统重新恢复的过程.例如:当Activity A到Activity B时,如果内存不足,A被回收, ...
- 深入Activity,Activity启动模式LaunchMode完全解析
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53221384本文出自[DylanAndroid的博客] 在平时的开发中,我们可 ...
- android Studio项目运行时报错“Could not identify launch activity: Default Activity not found”
出现红色的小叉叉,有点蒙圈的感觉 其实只是因为AndroidManifest.xml里面没有设置运行初始的activity <activity android:name=".MainA ...
- 关于通过adb启动Activity、activity、service以及发送broadcast的命令
一.启动activity: $ adb shell$ am start -n {包名}/{包名}.{活动名称} 如:启动一个名叫MainActivity的活动 # am start -n com.ex ...
随机推荐
- php中的base64写shell
<?php system(base64_decode($_GET['info'])); #http://localhost/1.php?info=d2hvYW1p #这只是一个例子 ?>
- 自动化测试===unittest配套的HTMLTestRunner.py生成html报告源码
更改版: 全部复制,命名为 HTMLTestRunner.py 文件 #使用方法参见之前的文档:自动化测试===unittest和requests接口测试案例,测试快递查询api(二) " ...
- 【Educational Codeforces Round20】
这场edu有点简单…… 所以题目可能也有点奇奇怪怪的. A.随意构造一下,可以发现只有当填满都不行时才可能无解. #include<bits/stdc++.h> using namespa ...
- 004_ssh连接慢的问题的解决?
<1>群中同学遇到的问题,我之前在uuwatch也遇到了同样的问题? 问个问题师兄们 突然之间 公司服务器连接很慢 连一个shell需要10几秒钟 服务器就在公司全是内网服务器, 我也不知 ...
- SVN使用详解
一.SVN的使用 项目经理使用,写好项目框架.文档等. 李四(程序员)的使用,在项目经理写好的框架上进行开发. 二.SVN三大指令 Checkout(检出操作): 连接到svn服务器 更新服务器数据到 ...
- Android内存溢出解决方案总结
我的视频会议中有三个内存泄露的崆点: 1) BNLiveControlView mView = this; 未释放 (自定义view中自己引用自己造成) 2) 在自定义View中区注册了系统的网络变化 ...
- [ Python ] set集合及函数的使用
1. set类型 set 和 dict 类似,也是一组 key 的集合,但是不存储 value. 由于 key 不重复,所以,在 set 中, 没有重复的 key 集合是可变类型 (1)集合的创建 ...
- java中的i++与++i有什么区别?
刚开始接触时,做了一些小测试,还以为这两个没有什么区别. public class OperatorDemo { public static void main(String[] args){ int ...
- Objective-C字符串处理的函数
Objective-C字符串处理的函数 NSLog(@"字符串处理"); //获得字符串长度 NSString* str1=@"MAC OS Pro"; NSL ...
- POJ-1410
Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12817 Accepted: 3343 Des ...