从0系统学Android-2.1Activity的使用
第二章:先从看的到的入手—Activity
上一章成功创建了自己的第一个项目。这一章从页面入手,来进行学习。
2.1 Activity 是什么
Activity 是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用可以有零个或者多个 Activity。
2.2 Activity 的基本用法
自己手动创建一个没有 Activity 的新项目
2.2.1 手动创建 Activity
项目创建成功后,看到如下目录
自己手动创建一个 Activity
右击 包名com.example.firstcode
—>New
—>Activity
—>Empty Activity
这个时候会弹出一个对话框,然后不要选择 Generate LayoutFile
和Launcher Activity
,然后点击 Finish
如果勾选了 Generate Layout File
后会自动给我们的 Activity 创建一个 Layout 布局,勾选了 Launcher Activity
后表示自动将当前 Activity 设置为主 Activity。这些内容留给我们后面自己实现。
好了现在我们自己创建了一个 Activity 了,任何 Activity 都要重写 onCreate 方法。
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(savedInstanceState);
}
}
可以看到刚刚生成的 Activity 的代码内容很简单,在 onCreate
方法中就是调用了父类的 onCreate
方法,这是默认的实现方式,后面很多的代码还需要我们自己来慢慢填满!
2.2.2 创建和加载布局
Android 的程序设计是讲究逻辑和视图分离的,最好要做到每个 Activity 都对应一个布局,布局是专门用来显示界面内容的。下面我们就来创建一个布局。
右击 app/src/main/res
目录——>New----->Directory,会弹出一个
新建目录的窗口,先创建一个 layout
的目录。然后对 layout
目录右键—>New-->Layout resource fie,这个时候就会弹出新建布局资源文件的窗口。
这里我们这样取名fist_layout
Root element 选择 LinearLayout
然后点击 OK
看到图中的布局编辑器,这是 Android Studio 为我们提供的可视化布局编辑器,在这里我们可以浏览我们布局的样子。在窗口下方有两个切换卡,左边是 Design
右边是 Text
。Design
是可视化布局编辑器,这这里可以预览布局,也可以通过拖拽编辑布局。Text
是通过 xml 来编辑布局。下面切换到 Text 模式。
左边就是我们的布局代码部分,我们刚刚创建的时候选择了 LinearLayout
布局作为根布局,所以这里就是LinearLayout
。 下面对布局添加一个按钮。
<?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:text="Button"
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
简单介绍一下 Button 里面的几个属性:
- android:id 是给当前元素定义个唯一标识符,以便之后可以对这个元素在代码中进行操作。在 xml 中定义一个 id 的格式是:
android:id=@+id/id_name
引用的格式@id/id_name
- Android:layout_width 指定当前元素的宽度。
match_parent
表示让当前元素和父元素一样宽。 - android:layout_height 指定当前元素高度。
wrap_content
表示高度刚好可以包裹元素内容。 - android:text 指定了元素的显示内容。
关于布局的编写详细内容,会在下一章内容重点讲解。
预览一下这个布局,有可能你的和我的不太一样,没关系只要你的按钮显示出来就可以了。不一样的原因是我们的样式选择不一样。你可以看到上面有个 Light
这个是用来选择样式的,还有 小眼睛的标志
也有可能导致我们的预览效果看上去不一样。(这些东西在初学阶段不用去纠结)
布局已经加载出来了,下面我们要做的就是让 Activity 去加载这个布局。
回到 MainActivity
在 onCreate
方法中添加:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 用于给当前 Activity 加载一个布局
setContentView(R.layout.first_layout);
}
我们在 onCreate
方法中添加了 setContentView()
方法来加载一个布局,需要传入一个布局的 id。Android 项目中任何的资源(res)包中的东西都会在 R 文件中生成一个对应资源的 id 因此我们可以通过 id 就可以将我们刚刚创建的布局加载到 Activity 中 了。
2.2.3 在 AndroidManifest 文件注册
任何 Activity 都需要在 AndroidManifest.xml
中注册才可以使用。实际上我们的 MainActivity
已经在 AndroidManifest
中注册了。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.firstCode">
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="com.example.firstcode.MainActivity"></activity>
</application>
</manifest>
这是我们在创建 Activity 的时候,开发工具 Android Studio 自动给我们注册的。
注册方式:在 <application>
标签内容,通过 <activiy>
标签来注册。
介绍一下 <activity>
中的属性,通过 android:name
来指明是哪一个 Activity。仅仅这样注册是不行的,因为没有给程序配置一个主 Activity,这样程序在运行的时候就不知道首先启动哪一个 Activity。
配置主 Activity 的方式:
在 activity
标签内添加<intent-filter>
标签。如
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name = "android.intent.category.LAUNCHER"/>
</intent-filter>
这样就会指定当前 Activity 为主 Activity。
除此之外,使用 android:label
属性来指定 Activity 的标题栏中的内容,标题栏是显示在 Activity 最顶部的(当然可以去掉)。注意:给主 Activity 设置 label 后,启动器中应用程序显示的名称也会是这个。
如果没有指定主 Activity 的话,程序是无法运行的。
好了,经过上面的步骤后,我们就可以运行程序了。
在页面最上面就是一个标题栏(如果你没有那是样式不一样,暂时忽略)。标题栏下面就是布局文件first_layout
编写的界面。
好了,现在我们已经掌握了如何创建一个 Activity 了下面继续学习我们在 Activity 中还可以做些什么!
2.2.4 在 Activity 中使用 Toast
Toast 是 Android 系统中一种非常好的提醒方式,可以将一些短小的信息通知给用户,这些信息一段时间后会自动消失,并且不会占用任何屏幕空间。
要想使用 Toast ,首先我们需要有一个触发事件。我们就设置点击按钮的时候弹出 Toast 吧。在 onCreate
中添加代码:
Button bt = findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(MainActivity.this,"显示内容",Toast.LENGTH_SHORT).show();
}
});
在 Activity 中可以通过 findViewById()
方法来获取当前布局中的定义元素。传出的就是你想要获取的那个元素的 id。调用 setOnClickListener
是给这个元素注册一个监听器,用于监听是否有点击。点击触发时就会调用 onClick
方法。
Toast 的使用方法很简单,通过调用它的静态方法makeText
会创建一个 Toast 对象,然后调用 show
方法,展示 Toast。makeText 方法需要传入三个参数,Context参数:上下文,Activity本身是Context 的子类。第二个参数就是要显示的内容,第三个参数是显示的时长,只能选择Toast.LENGTH_SHORT
或者 Toast.LENGTH_LONG
。
运行结果:
2.2.5 在 Activity 中创建 Menu
手机不通与电脑,屏幕空间有限,需要充分的利用好手机空间,如果 Activity 中有大量的菜单,那么只是菜单就占据了大部分屏幕,是非常不合理的设计。Android 为了解决这个问题给我们提供了菜单
首先在 res
目录,新建一个 menu
目录,然后在 menu
目录内容新建一个 menu resource file
,取名 main。
然后在 main.xml
中添加代码
<?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>
这里创建了两个菜单项,其中 <item>
标签就是来创建某一个菜单项的,然后通过属性 android:id
来给这个菜单项设置唯一标识,通过 title
这个属性给菜单项指定名称。
然后到 Activity 中重写 onCreateOptionsMenu()
方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
通过 getMenuInflater()
获取 MenuInflater
对象,然后调用他的 inflate
方法。第一个参数就是指定我们创建的 Menu 的资源,第二个参数,用与指定我们的菜单将会添加到那个 Menu 对象中,这里直接使用方法中的 menu 然后 return true,表示运行菜单显示出来,如果是 false 则创建的菜单无法显示(三个点也没有)。
仅仅让菜单显示出来是不够的,我要对菜单进行操作,就用到方法 onOptionsItemSelected()
了。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"remove",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
在 onOptionsItemSelected()
方法中通过 item.getItemId() 来判断我们点击了那个菜单项。
运行程序:
会发现在标题栏多了三个点
,点击这三个点就会弹出菜单了。
2.2.6 销毁一个 Activity
想要销毁 Activity 很简单,Activity 给我们提供了一个方法finish()
我们只要调用一下这个方法,当前的 Activity 就会销毁。
从0系统学Android-2.1Activity的使用的更多相关文章
- 从0系统学Android-2.5更多隐式Intent用法
本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 从0系统学Android-2.5更多隐式Intent用法 上一节中我们学习了通过隐式 Intent 来启动 Act ...
- 从0系统学Android--4.1探究碎片
从0系统学Android--4.1探究碎片 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 第四章:手机平板要兼顾--探究碎片 平板电脑和手机最 ...
- 从0系统学Android--3.7 聊天界面编写
从0系统学Android--3.7 聊天界面编写 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.7 编写界面的最佳实践 前面学习了那么多 UI 开发的知识,下面来进行实践,做一个美观 ...
- 从0系统学Android--3.6 RecyclerView
从0系统学Android--更强大的滚动控件---RecyclerView 本系列文章目录:更多精品文章分类 本系列持续更新中.... 参考<第一行代码> 首先说明一点昨天发了一篇关于 L ...
- 从0系统学Android--3.5 最常用和最难用的控件---ListView
从0系统学Android-- 3.5 最常用和最难用的控件---ListView 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.5 最常用和最难用的控件---ListView Lis ...
- 从0系统学Android--3.2四种基本布局
从0系统学Android--3.2四种基本布局 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.3 系统控件不够用?创建自定义控件 上一节我们学习了 Android 中的一些常用的控件 ...
- 从0系统学Android--3.1编写UI界面
从0系统学Android--3.1编写UI界面 本系列文章目录:更多精品文章分类 本系列持续更新中.... 界面设计和功能开发同样重要,界面美观的应用程序不仅可以大大增加用户粘性,还能帮我们吸引到更多 ...
- 从0系统学Android--2.6 Activity 的最佳实践
从0系统学Android--2.6 Activity 的最佳实践 本系列文章目录:更多精品文章分类 本系列持续更新中.... 实践中的技巧 2.6.1 知晓当前是在哪个 Activity 这个其实很简 ...
- 从0系统学Android--5.2 发送广播
从0系统学Android--52 发送广播 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 5.3 发送自定义广播 前面已经学习了如何接受广播了 ...
- 从0系统学Android--1.3创建你的第一个 Android 项目
1.3 创建你的第一个 Android 项目 环境搭建完成后,我们就可以写下我们的第一个项目了. 1.3.1 创建 HelloWorld 项目 在 Android Studio 的欢迎页面点击 Sta ...
随机推荐
- linux指令大全(归类整理)
一.文件目录指令 1 pwd指令 pwd 显示当前所在的目录 2 ls指令 ls [选项] [目录或文件] 查看文件信息 ls -a 查看所有文件和目录,包括隐藏的 ls -l 以列表的方式显示 ll ...
- MAC 软件提示已损坏,需要移到废纸篓的解决方法
解决方法一: 允许任何来源的应用.在系统偏好设置里,打开“安全性和隐私”,将“允许从以下位置下载的应用程序”设置为“任何来源“.当然,这个设置已经无法在Mac OS Sierra上完成了. 在Mac ...
- FCC---Create a Gradual CSS Linear Gradient
Applied Visual Design: Create a Gradual CSS Linear Gradient background: linear-gradient(gradient_dir ...
- http请求post,文件导出兼容IE10+
1.post的方法里要加responseType: 'blob'参数,不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel"}的写法 ...
- Dynamics 365 CE Update消息PostOperation阶段Image的尝试
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- LiveData使用
### Andorid LiveData 使用 [[_TOC_]] #### Lifycycle 使用1.继承FragmentActivity 实现LifecycleOwner接口2.声明一个Life ...
- xBIM 综合使用案例与 ASP.NET MVC 集成(一)
XbimWebUI是一个Javascript库,可用于BIM模型的Web表示.它使用WebGL并且独立于任何第三方WebGL框架.查看器的数据格式为WexBIM.不能直接加载IFC文件. 一.将IFC ...
- 删除Word中出现的空白页
删除Word中出现的空白页 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ Word中出现空白页,怎么删都删不掉,Backspace与Delete键不管 ...
- 简述FreeCAD在vs2017下的编译与dxf导入
最近发现 FreeCAD 官方在发布 0.19_pre 时已提供 vs2017 x64的LibPack,现在就再来测试一下. 编译 下载 FreeCADLibs_12.1.2_x64_VC15.7z ...
- 【转】Cookie和Session和Cache
1 Cookie和Session Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实 ...