探究活动Activity

简介: 探究活动Activity

1.手动创建活动


首先我们创建一个名为ActivityTestDemo的项目。


注意到,既然是手动创建活动,我们在Add an Activity Mobile这个环节就要选择Add No Activity,如下图所示


20190226113712607.png


然后点击finish完成这个创建,进入到项目主界面,然后打开app→src→

main→java→com.example.activitytestdemo,你会发现这个包下面并没有MainActivity,这是为什么呢?因为我们刚才添加的是一个没有活动的项目,如下图所示


20190226114343936.png


接下来我们就进入正题,创建活动了.鼠标右键点击com.example.activitytestdemo包→New→Activity→Empty Activity,如下图所示


2019022611463463.png


会弹出一个创建活动的界面,如下图所示


这里注意到,不要勾选Generate Layout File 和Launcher Activity


2019022611533841.png


为了区别之前的MainActivity,我们将活动的名字改为FirstActivity(Generate Layout File默认是勾选的,代表会自动为我们的FirstActivity创建一个对应的布局文件,而勾选Launcher Activity表示会自动将FirstActivity设置为当前项目的主活动,这里都不勾选,后面再创建布局和设置活动。而勾选Backwards Compatibility(AppCompat)表示会为项目启动用下兼容的模式,这个要勾选上),然后点击Finish完成创建。


2.创建布局和加载布局


鼠标右键点击res→New→Directory来创建一个名为layout目录。如下图所示


20190226120206560.png


接着我们右键点击layout目录→New→Layout resource file,会弹出一个新建布局资源文件的窗口,我们将这个布局文件命名为first_layout对应刚才创建的活动,根元素就默认选择为LinearLayout(表示线性布局),点击OK完成创建,如下图所示


20190226120812748.png

20190226121049434.png


这个界面是Android Studio为我们提供的可视化布局编辑器,你可以在屏幕的中间预览当前的布局,窗口最下方有两个切换卡,Desigr和Text。Desigr是当前的可视化布局编辑器,你可以通过拖动控件的方式来编辑布局,但并不推荐这样做(适用于快速开发),Text是通过XML文件的方式来编辑布局的,现在点一下Text进行切换。里面的代码如下:


<?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">
</LinearLayout>


可以看到里面有一个LinearLayout元素,这是一个布局,它现在是作为主布局的(也是父布局,它的里面还可以在嵌套其他的布局),现在我们在其中添加一个按钮,如下所示:


<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_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 1"/>
</LinearLayout>


这里添加了一个Button元素,里面有几个属性,我们来看一下,首先是android:id是给当前的元素定义一个唯一标识符(就是给这个按钮一个编号,意思跟9527差不多,之后就是通过这个编号来对这个按钮进行编写动作),android:layout_width指定当前元素的宽度,这是使用match_parent表示让当前元素和父元素(也就是LinearLayout)一样宽。android:layout_height指定当前元素的高度,这是使用wrap_content表示当前元素的高度只要刚好能包含里面的内容就行。android:text指定了元素中显示的文字内容。如下图所示


20190226122653646.png


现在布局创建好了,我们去活动中加载它,打开FirstActivity,在onCreate()方法中加入如下代码


public class FirstActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);//这是我们加的代码
    }
}


可以看到已经增加了代码,并在后面注释了,如果你是单行代码可以在代码的上进行注释或者放在代码的后面(视代码长短来定,注意美观,注释代码是一个良好编码习惯),我们这里调用了**setContentView()方法给当前的活动加载一个布局,在这个方法中传入布局文件的id,项目中添加的任何资源都会在R文件中生成一个相应资源的id,所以我们用R.layout.first_layout来找到这个布局文件,并通过setContentView()**方法来引用它。


2.1 在AndroidManifest文件中注册


之前的HelloWorld中我们提到,所有的活动都要在AndroidManifest.xml中进行注册才能生效,而实际上FiirstActivity已经注册过了,我们打开AndroidManifest.xml看一下,代码如下所示


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitytestdemo">
    <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"></activity>
    </application>
</manifest>


可以看到标签内有一个已经注册好的 就是**.FirstActivity**这是一个缩写,全称是com.example.activitytestdemo.FirstActivity,因此我们就不需要注册活动了,不过这仅仅是注册了活动,但还没有给程序配置主活动,所以还是不能运行的,然后我们来配置主活动。


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitytestdemo">
    <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>


可以看到中间的部分就是新增打代码,这里我们给项目换了一个标题android:label=“This is FirstActivity”,而配置主活动只需要在里面放这两行代码就可以了,如下所示


<intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>


现在我们主程序已经配置完成了,已定义了显示的布局文件,现在来运行一下吧。


20190226162012165.png


已经修改好了,平时我们使用APP时,都会有一些提示(Toast),接下来我们来看一下怎么用,


2.2 Toast的使用


介绍:Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,过一会又会自动消失,并且不会占用任何屏幕空间,现在来试试吧。
  首先我们需要定义个弹出Toast的触发点(==也就是发生条件,什么情况下产生这个Toast提示==),这里我们以点击按钮作为触发点,代码如下:


package com.example.activitytestdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class FirstActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        /**
         * 给Toast设置触发点 
         */
        Button button1 = (Button)findViewById(R.id.button_1);//首先实例化按钮
        button1.setOnClickListener(new View.OnClickListener() {//按钮的点击监听事件
            @Override
            public void onClick(View v) {
                Toast.makeText(FirstActivity.this,"You Click Button 1",Toast.LENGTH_SHORT).show();
            }
        });
    }
}


为了避免不必要的麻烦,我把所有代码都写上,我们先实例化这个按钮,然后在这个按钮的setOnClickListener()方法为按钮注册一个监听器,点击按钮就会执行监听器中的方法onClick()方法,所以我们的Toast要放在这个onClick()方法里面才行。


Toast首先通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来,我们看到makeText()方法中传递了三个参数,第一个参数是Context(也就是Toast要求的上下文参数),而活动本身就是一个Context对象,因此这里直接传入FirstActivity.this即可,第二个参数是Toast显示的文本内容,第三个参数是Toast显示时长,有两个内置常量可以选择Toa


st.LENGTH_SHORT和Toast.LENGTH.LONG,建议你用第一个短时间的(因为第二个显示的时间较长,在哪里一动不动的,又不能直接关闭,好讨嫌的),现在我们再运行一下,然后点击按钮,看看效果,如下图所示。


2019022616543740.jpg


已经是有了,接下来我们来使用Menu(菜单)


2.3 Menu的使用


首先我们再res目录下新建一个menu文件夹,右击res目录→New→Dircetory,输入menu,建好menu目录后,再鼠标右击menu目录→New→Menu resource file,输入main,点击OK就创建好了(PS:创建目录及创建文件我不就截图了,都是基本操作了),打开main.xml,代码如下


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!--   添加两个item   -->
    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="remove_item"
        android:title="Remove"/>
</menu>


创建了两个菜单项,然后回到FirstActivity中重写onCreateOptionsMenu()方法,快捷键为Ctrl+O。


2019022617423926.jpg

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


通过getMenuInflater()方法能够得到MenuInflater对象,再调用它的inflate()方法就可以给当前活动创建菜单了。inflate()方法接收两个参数,第一个参数用于指定我们通过那个资源文件来创建菜单,这里传入我们创建的main.xml文件 (还是通过R.menu.main),第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法中传入的menu参数。然后返回true,表示允许创建的菜单显示出来,改成false,就不会显示出来。


当然现在的菜单也只能是一个摆设,我们还需要让它能够相应用户操作,所以我们还需要在FirstActivity中重写onOptionsItemSelected()方法:



@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_item:
                Toast.makeText(this,"You Clicked 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;
    }


onOptionsItemSelected()方法中,通过调用item.getItemId()来判断我们点击的是哪一个菜单项,然后给每个菜单项添加逻辑处理,也用Toast。然后运行一下项目,如下图所示。


20190226184616148.png


最后附上FirstActivity的完整代码:


package com.example.activitytestdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class FirstActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        /**
         * 给Toast设置触发点
         */
        Button button1 = (Button)findViewById(R.id.button_1);//首先实例化按钮
        button1.setOnClickListener(new View.OnClickListener() {//按钮的点击监听事件
            @Override
            public void onClick(View v) {
                Toast.makeText(FirstActivity.this,"You Click Button 1",Toast.LENGTH_SHORT).show();
            }
        });
    }
    //重写onCreateOptionsMenu()方法
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }
    //重写onOptionsItemSelected()方法
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_item:
                Toast.makeText(this,"You Clicked 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;
    }
}


相关文章
|
7月前
|
前端开发 JavaScript Android开发
《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期
《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期
61 0
|
存储 监控 API
Activity初窥门径
上一节中我们对Activity一些基本的概念进行了了解,什么是Activity,Activity的生命周期,如何去启动一个Activity等,本节我们继续来学习Activity,前面也讲了一个App一般都是又多个Activity构成的,这就涉及到了多个Activity间数据传递的问题了,那么本节继续学习Activity的使用!另外关于传递集合,对象,数组,Bitmap的我们会在Intent那里进行讲解,这里只介绍如何传递基本数据!
67 0
|
Android开发
深入剖析Android四大组件(八)——结束Activity的4个阶段(一)
深入剖析Android四大组件(八)——结束Activity的4个阶段(一)
230 0
|
调度 Android开发
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
172 0
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
|
Android开发 UED 开发者
探究活动Activity(2)界面跳转及生命周期
探究活动Activity(2)界面跳转及生命周期
235 0
探究活动Activity(2)界面跳转及生命周期
|
开发框架 监控 数据可视化
|
存储 XML Java
Activity 复习笔记 —— 唠唠生命周期
Activity 复习笔记 —— 唠唠生命周期
Activity 复习笔记 —— 唠唠生命周期
|
Android开发
事件分发四部曲之三《CoordinatorLayout事件分析》
事件分发四部曲之三《CoordinatorLayout事件分析》
事件分发四部曲之三《CoordinatorLayout事件分析》
|
缓存 Java 程序员
庖丁解牛 Activity 启动流程
庖丁解牛 Activity 启动流程
庖丁解牛 Activity 启动流程