Android四大组件之活动

来源:互联网 发布:怎么启动mysql 编辑:程序博客网 时间:2024/05/21 01:44

1.1 活动是什么

        活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中可以或多或少包含零个或多个活动,但不包含任何活动的程序很少见,谁也不想自己的应用永远无法被用户看到吧?

        Activity作为android四大组件之首,是使用最频繁的一种组件,中文直译为“活动”,但是笔者认为将其翻译成界面会更容易理解。正常情况下,除了window  ·  Dialog ·  Toast,我们能见到的界面的确只有Activity。

1.2 活动的基本用法

          首先先创建一个android项目,打开androidStudio,点击start a new  Android  Studio project:



然后选择Add No Activity


 点击Finish, 等待Gradle构建完成后, 项目创建成功了。


1.2.1 手动创建活动


右击com.example.administrator.activitytest包->New->Activity->Empty Activity,弹出一个创建活动的对话框我们将活动命名为FirstActivity,并且不要勾选Generate Layout File(表示自动创建布局文件)和Launcher Activity(表示自动将FirstActivity设置为当前项目的的主活动)勾选Backwards Compatibility(表示为项目启动向下兼容模式),点击Finish完成创建。


你需要知道,项目中的任何活动都要重写Activity的onCreat()方法,目前我们的FirstActivity已经重写了这个方法,这是由androidstudio帮我们完成的,代码如下:

public class FirstActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }}
1.2.2 创建和加载布局
 
点击app/src/main/res目录->New->Directory,会弹出一个新建目录的窗口,这里创建一个名为Layout的目录。然后对着这个目录右键->New->Layout resource file,将布局文件命名为first_layout.点击ok完成布局的创建。
Android Studio为我们提供可视化的布局编辑器,在窗口最下方有两个切换卡,左边是Design(通过拖动控件的方式编辑布局),右边是Text(通过XML文件的方式编辑布局)。

点击Text切换卡,可以看到如下代码:

<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/button1"
    android:layout_width="match_parent"    android:layout_height="wrap_content" />
</LinearLayout>

可以看到我们在视图上放了一个按钮


可以看到,按钮已经显示出来,接下来要做的就是在活动中加载这个布局

public class FirstActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.first_layout);    }}
红色部分为我们添加的代码,可以看到这里调用了setContentView()的方法来给我们当前活动加载一个布局,传入的参数为一个布局文件的id,项目中添加的任何资源都会在R文件中生成一个相应的资源id,因此我们刚才创建的first_layout.xml布局的id,然后将这个值传入setContent方法即可。


1.2.3   在AndroidManifest文件中注册

  

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

可以看到,活动的注册声明要放在<application>标签内,这里通过<activity>标签来对活动进行注册的。当然啦,androidstudio会自动帮我们完成对FirstActivity的注册,由于在<manifest>标签中已经通过package属性指定了程序的包名,因此在android:name指定活动名就可以省略包名。

        不过,仅仅是注册了活动,我们程序任然是不能运行的,因为还没为程序配置主活动,也就是说,当程序运行起来的时候,不知道首先启动哪个活动。接下来我们开始配置主活动

<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:lable="This is FirstActivity ">        <intent-filter>            <action android:name="android.intent.action.MAIN"/>            <category android:name="android.intent.category.LAUNCHER"/>        </intent-filter>    </activity></application>
 绿色部分为我们添加的代码,android:lable用于指定标题栏的内容。

1.2.4  在活动中使用Toast

protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.first_layout);    Button button1 = (Button) findViewById(R.id.button1);    button1.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Toast.makeText(FirstActivity.this, "You clicked Button 1",                                  Toast.LENGTH_SHORT).show();        }    });}
通过findViewById()获取布局文件中定义的元素,这里我们传入R.id.button1,这个值是刚在first_layout布局文件中通过android:id属性指定的.findViewById()方法返回的是一个View对象,我们需要向下转型将它转成Button对象

得到按钮的实例之后,我们通过调用setOnClickListener()方法为按钮注册一个监听器,点击按钮时就会执行监听器中的onClick()方法。因此弹出的Toast功能当然是要在onClick()方法中编写了。makeText()方法第一个参数为一个context对象,第二个参数为Toast显示的文本内容,第三个参数是Toast显示的时长。


1.2.5 在活动中使用菜单(menu)

 首先在res目录下新建一个menu文件夹,右击res目录->New->Directory,输入文件夹名,点击OK。接着在这个文件夹下再新建一个名叫main的菜单文件,右击menu文件夹->New->Menu resource file,文件名输入main,点击OK完成创建。然后在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给这个菜单项指定一个唯一的标识符,通过android:title给这个菜单栏指定一个名称。

接着重新返回到FirstActivity中来重写onCreatOptionMenu()方法,代码如下:

public  boolean onCreatOptionsMenu(Menu menu) {    getMenuInflater().inflate(R.menu.main,menu);    return true;}
通过getMenuInflater()方法能够得到MenuInflater对象,再调用它的inflate()方法就可以给当前活动创建菜单了。inflate()方法接收两个参数,第一个参数用于指定我们通过哪个资源文件来创建菜单,这里当然是传入R.menu.main。第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中,这里直接用onCreateOptionMenu()方法中传入的menu参数。然后给这个方法返回true,表示允许创建的菜单显示出来,如果返回false,创建的菜单将无法显示。
当然菜单不仅是为了好看和节省空间,关键是要菜单真正可用才行,因此还要再定义响应事件。在FirstActivity中重写onOptionItemSelected()方法:
public boolean onOptionItemSelected(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;}
在onOptionItemSelected()方法中,通过调用item.getItemId()的方法来判断我们点击的是哪一个菜单项,然后给每一个菜单项加入自己的逻辑处理,这里我们就活学活用,弹出一个刚刚学会的Toast。

1.2.6    如何销毁一个活动

其实答案很简单,只要按一下Back键就可以销毁当前的活动,不过如果你不想通过按键的方式,而是希望在程序中通过代码来销毁活动,当然也可以,Activity类提供了一个finish()方法,我们在活动中调用一下这个方法就可以销毁当前的活动了。

修改按钮监听器中的代码,如下所示:

 

button1.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {
    finish();
  });



      

原创粉丝点击