zoukankan      html  css  js  c++  java
  • Android活动(Activity)的基本介绍

    在经过了长时间的实践之后,我发现一件事儿——

      对于我这种Java实践经验很少的学生来说,学习Android要是只拘泥于看书本或者看视频,然后照着书把代码敲一遍,等过了几天肯定忘(我已经体会过太多次了)。痛定思痛,在百度上对学习Android的方法一番搜索,得出结论如下——

      现在我是边学习Java边学习Android,对于Java,我可以只记录下自己不是很懂的知识点,但是对于Android,我只有做到每个部分都去记录才能掌握这一部分。所以说,今天开始,不再只追求进度,而是要认真记录下自己每一部分的学习经历,熟练之后才往下进行。大的章节的记录使用博客,小的知识点使用印象笔记。两者配合,应该能让自己的学习效果更好。

    主要的学习资源就是第一行代码,在记录的过程中会融合一些自己的想法,不会照搬书本,否则没有意义。

     活动是什么?

    活动就是一种可以包含用户界面的组件,用于和用户交互,也就是我们能看见的那些界面。活动可以是嵌套的,也就是说,一个活动可以包含多个活动。

    一个app可以有活动也可以没有活动(比如什么银联安全服务app,没有界面,只是充当绿叶的功用)

    活动的基本用法

    我们在AS新建一个默认的空活动,Java代码如下:

     1 import android.support.v7.app.AppCompatActivity;
     2 import android.os.Bundle;
     3 
     4 public class Main3Activity extends AppCompatActivity
     5 {
     6 
     7     @Override
     8     protected void onCreate(Bundle savedInstanceState)
     9     {
    10         super.onCreate(savedInstanceState);
    11         setContentView(R.layout.activity_main3);
    12     }
    13 }

    可以看到,一个活动必须有OnCreate方法。首先在这个方法调用了父类的的OnCreate(),然后setContentView()见名知意,是用来加载布局(xml)。也就是说,这句话可以将活动与布局相关联。

    那么相应的默认xml布局文件如下()为了便于描述我添加了一个Button,也就是按钮:

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3     android:layout_width="match_parent"
    4     android:layout_height="match_parent">
    5     <Button
    6         android:layout_width="wrap_content"
    7         android:layout_height="wrap_content" 
    8         android:id="@+id/button"/>
    9 </LinearLayout>

    这里介绍下XML的基本语法结构:

    第一行是XML声明,它定义了XML版本(version=1.0)和使用的编码(UTF-8),我们一般不管它,默认就好。

    第二行描述的是文件的根元素,说明了本文档大的框架是LinearLayout,里面怎么折腾我不管,我这个文件就是LinearLayout布局。

    第三行,是根的子元素。一个根元素可以包含多个子元素,这样就实现了嵌套,可以实现复杂的布局。当然,子元素也可以是以LinearLayout为根元素的子元素。

    一个XML文件的结构大概就是这样,下面再稍微具体说下每一部分。

    我们可以发现,标签一定是成对出现的。而且结构大概像下面这样:

    <Element>xxx</Element>

    或者

    <Element/>两种格式,那么这两种格式有什么区别呢?

    Element是一个元素,它里面不仅可以包含名称(LInearLayout),也可以包含属性(layout_height,layout_width)。xxx代表这个元素包含的内容,也就是有没有其他元素。当xxx为空时,我们可以将第一种方式简写为第二种方式,也就是“自闭合元素”。就像Button元素,这个元素里面不包含其他元素,所以我们可以使用简写方式。当然,我们用普通方式也是没问题的:

    1 <Button
    2     android:id="@+id/ad"
    3     android:layout_height="wrap_content"
    4     android:layout_width="wrap_content">
    5 </Button>

     接下来说下 xmlns:android="http://schemas.android.com/apk/res/android"这句话是什么意思。

    xmlns,就是xml文件的命名空间(XML namespaces)。为的是避免元素命名起冲突,用这个标示可以指定某个空间下的某个特定元素而不起冲突。

    举个栗子:1班有个人叫小花,2班也有个小花,她们俩住一个宿舍楼(同一个文件),那么如果有个男生想在1班的小花宿舍楼下表白就很尴尬了,因为你要是只说:小花俺稀罕你,是没人知道你说的是哪个班小花的,所以我们就需要指定:1班的小花俺稀罕你,这样你就能知道是被哪个班的小花拒绝的了(滑稽脸)。

    Android中的命名空间有3种:

    android命名空间:xmlns:android="http://schemas.android.com/apk/res/android;
    tools命名空间:xmlns:tools="http://schemas.android.com/tools;
    自定义命名空间:xmlns:app="http://schemas.android.com/apk/res-auto"

    我们可以使用android:xxx这种方式去定义属性就是因为我们实现规定了命名空间。

    先简单介绍下,以后专门写一篇来介绍,现在只需要记住并稍微理解就好了。

    还是看这个

    1  <Button
    2      android:layout_width="wrap_content"
    3      android:layout_height="wrap_content"
    4      android:id="@+id/button" />

    android:id="@+id/button"是为这个按钮定义一个唯一id标示,(@+xx/xxx是添加标示,@xx/xxx是引用标示),android:layout_width是当前元素的宽度,wrap_content值包裹住里面的内容,而match_parent指和其父布局一样的高度,android:layout_height同理。

    我们这时候再看Java文件中的 setContentView(R.layout.activity_main3);是不是其参数的写法很眼熟呢?没错,这就是在Java文件里面引用XML文件元素的方法,布局id都被自动添加到R文件当中了,我们只需要调用R.id方法就可以了。

    在AndroidManifest文件中注册

    Androidmanifest文件相当于一个统领,记录着这个app中最重要的信息。

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     package="com.example.myapplication">
     5 
     6     <application
     7         android:allowBackup="true"
     8         android:icon="@mipmap/ic_launcher"
     9         android:label="@string/app_name"
    10         android:roundIcon="@mipmap/ic_launcher_round"
    11         android:supportsRtl="true"
    12         android:theme="@style/AppTheme"
    13         tools:ignore="GoogleAppIndexingWarning">
    14         <activity android:name=".FirstActivity">
    15             <intent-filter>
    16                 <action android:name="android.intent.action.MAIN" />
    17                 <category android:name="android.intent.category.LAUNCHER" />
    18             </intent-filter>
    19         </activity>
    20         <activity android:name=".SecondActivity">
    21 
    22         </activity>
    23         <activity android:name=".Main3Activity"></activity>
    24     </application>
    25 
    26 </manifest>

    每一个activity,都要在这个文件中注册,也就是那些activity标签。

    我们发现,android:name属性值是.FirstActivity,因为在manifest标签中已经指定了package的名字,所以我们可以在下面写活动名称的时候使用简略写法:.FirstActivity。

    我们的活动虽然已经注册了,但是我们的程序还是跑不起来的,因为我们还没有配置哪个活动是主活动,也就是当我们打开app的时候首先要启动的活动。所以我们要配置一个标签用来声明主活动:<intent-filter>,并加入声明:

    1 <action android:name="android.intent.action.MAIN" />
    2 <category android:name="android.intent.category.LAUNCHER" />

    加入这三步,就可以让一个普通的活动变成主活动。

    我们还可以观察到这个文件的上部有很多的属性,见名知意,我们可以修改这些标签来改变相应的属性值,比如修改label标签

    等等。修改这个标签不禁闹可以修改我们app顶部的标题栏的内容,也可以同时修改我们app在启动器的名称哦。

    这样,我们一个最基本的活动就创建完成了。

    我们现在学会了创建一个活动,但是,我们应该怎么去销毁一个活动呢?

    其实很简单,你只需要点击手机的back键就可以了。当然,以代码的方式实现也是可以的,只需要在你的逻辑中添加:

    1 finish();

    就可以了。我们可以在按钮的监听器中添加这句话以达到“点击退出”的效果。

    关于活动的其他相关,篇幅原因我放在下一篇来介绍。

    菜鸟一个,多多指教!

  • 相关阅读:
    7.13dfs例题:部分和
    7.12dfs例题:数独游戏
    1.2题解:如何找数组中唯一成对的那个数(位运算)
    左程云Java算法(1)
    SQL基本语句增删改查
    Python spyder Ipython console 连接失败问题
    VBA——Msgbox
    python 字符串
    Scrapy-selectors总结
    文字单行居中,多行居左/居右
  • 原文地址:https://www.cnblogs.com/KangYh/p/9917405.html
Copyright © 2011-2022 走看看