Android 第一课 Activity

以下说明基于Android Studio,简称AS。(红色字体为自行添加,注在醒目)

具体包括:

  • 创建活动
  •     创建项目
  •     加载布局
  •     在AndroidManifest文件中注册
  • 活动中使用(提醒)Toast
  • 在活动使用(菜单)menu
  • 销毁活动

所谓活动(Activity):是一种包含用户界面的组件,主要用于和用户进行交互。

        在Android Studio 内进行新建项目ActivityTest,项目报名默认为,com.example.ActivityTest,其余步骤默认即可。然后一个项目就创建完成。

  • 手动创建活动:

    步骤:创建项目(可以勾选Generate Layout File),假如此时已经创建好一个活动,及其对应的一个布局文件,然后默认重写onCreate()方法,->    布局文件已经创建好,编辑布局xml文件(比如可以添加一个Button,但是然后要在对应的Activity文件加载这个Button.)->所有的活动都要在AndroidManifest.xml中进行注册才能进行生效,但是AS已经自动将活动在AndroidManifest.xml中注册了->配置主活动,添加<action android:name="android.intent.action.MAIN" />以及 <category android:name="android.intent.category.LAUNCHER" />表示主活动。

    

    找到com.example.activity包右击新建Empty Activity,活动命名为FirstActivity,不要勾选Generate Layout File(会自动创建一个对应的布局文件Layout,在res目录的Layout目录下) 和Launcher Activity(会自动设置为当前项目的主活动),但要勾选Backwards Compatibility 表示选择向下兼容模式。然后完成创建。

        项目中的任何活动都应该重写Activity的onCreate()方法,这一步骤AS会帮我们自动完成,默认实现。代码如下:

package com.example.activitytest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class FirstActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);//调用了父类的onCreate()方法
    }
}

Android程序讲究逻辑和视图分离,最好每个活动对应一个布局,所谓布局是指用来显示界面内容的,因为上一步没有勾选Generate Layout File,所以我们要手动创建一个布局文件。右击res目录的layout的目录,新建Layout resource file,命名为first_layout,根元素默认为LinearLayout(线性布局)。

    在first_layout.xml文件下,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元素了,对布局文件进行编辑,添加一个按钮,如下所示:

<?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:id="@+id/button_1"//当前元素的唯一标识符
        android:layout_width="wrap_content"//当前元素的宽度
        android:layout_height="match_parent" //当前元素的高度
        android:text="Button 1"/>//当前元素中显示的文字内容
</LinearLayout>

一个按钮就成功的显示出来了。接下来我们在活动中加载这个布局,返回到FirstActivity,在onCreat()方法中加入代码。

package com.example.activitytest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FirstActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);//调用了setContenView()方法来给当前的活动加载一个布局,而在setContentView()方法中,我们一般会传入一个布局文件的id(项目中添加的任何资源都会在R文件中生成一个相应的资源id,只需要调用R.layout.first_layout就可以得到first_layout.xml布局的id)
    }
}

所有的活动都要在AndroidManifest.xml中进行注册才能进行生效,而FirstActivity已经在AndroidManifest.xml中注册过了,打开AndroidManifest.xml文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitytest">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
      /*  <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>*/ 注释符内先别在意。
        <activity android:name=".FirstActivity"></activity>
    </application>
</manifest>

活动的注册声明要放<application>标签内,这里时通过<activity>来对活动进行注册。很明白:是AS自动完成了对FirstActivity的注册。<activity>标签中我们使用了android:name来指定具体注册哪一个活动,这里填入.FirstActivity(com.example.activitytest.FirstActivity的缩写)。这是由于最外层的<manifest>标签中已经通过package属性指定了程序的包名是com.example.activitytest。

    不过,仅仅注册了活动,程序是不能运行的,还没有为程序配置主活动,程序运行先从主活动开始。配置主活动的方法是在<activity>标签的内部加入<intent-filter>标签,并在这个标签中添加<action android:name="android.intent.action.MAIN" />以及<category android:name="android.intent.category.LAUNCHER" />这两句的声明即可。
这部分就是我们上面用注释符/**/注解掉的部分。除此之外,我们还可以是使用android:lable指定活动中标题栏的内容,标题栏是显示在活动最顶部的,给主动指定的lable不仅会成为标题栏的内容,还会成为启动器(Launcher)中应用程序显示的名称。再次打开AndroidManifest.XML文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitytest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

不出所料,现在程序无bug,已经可以开始运行。

  • 在活动中使用Toast

    Toast是一种非常好的提醒方式,在程序中可以使用它将一些短小的消息通知给用户,过一段时间会自动消失。在活动中使用Toast。首先定义一个弹出Toast触发点,正好界面有一个按钮,我们就让点击这个按钮的时候弹出一个Toast吧,在onCreat()方法中添加如下代码:

package com.example.activitytest;
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_activity);
        
        Button button1 = (Button)findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(FirstActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

    在活动中通过findViewById()方法获取到在布局文件中定义的元素,这里传入的为R.id.button_1,来得到这个按钮的实例,这个值是在first_layout.xml中通过android:id指定的。findViewById()方法返回是一个View对象,我们将它向下转型为Button对象。得到按钮对象实例后,通过调用setOnClickListener()方法为按钮注册一个监听器,点击按钮就会执行监听器中的onClick()方法。因此,弹出Toast的功能当然是在OnClick()中编辑

    Toast的用法灰常简单,用过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来就可以了。

    makeText()方法需要传入3个参数,第一个参数是Context,就是Toast要求的上下文,由于活动本身就是一个Context对象,因此这里这要传入FirstActivity.this就行了。第二个参数是Toast显示的内容。第三个参数是Toast显示的时长,有两个内置常量可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG。

重新运行,并点击按钮,如下图:


  • 在活动中使用menu

菜单(menu)作用节省空间。

右击res目录下new一个Directory,输入文件名menu。然后右击menu文件new一个Menu resource file 命名为main。点击完成。

<?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()方法,重写方法使用Ctrl+O,然后在onCreatOptionMenu()方法中编写如下代码:

public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
}

通过getMenuInflater()方法能够得到MenuInflater对象,在调用它的inflate()方法,就可以给当前活动创建菜单了。inflate()方法接受两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单,这里传入R.menu.main,可以理解为就是所在的目录地址。第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法中传入的menu参数。然后给这个方法返回true,表示允许创建的菜单显示出来,如果返回false,表示创建菜单无法显示。

以上步骤,仅仅是让菜单显示出来,但是并不能真正的使用。因此还要定义菜单响应事件,在FirstActivity中重写onOptionsItemSelected()方法,代码如下:

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。运行之后,如下图,




  • 销毁一个活动

如何销毁一个活动呢?按一下back键就可以销毁当前的活动了,也可以使用另一种方法,Activity类提供了一个finish()方法,在活动中调用一下这个方法就可以销毁当前活动了。代码如下:

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



注:此次一系列android 文章,均有参考郭霖书籍《第一行代码》,再一次无法抑制对大牛的崇敬。








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值