Android开发2:探究活动(Activity)

2.1活动是什么

活动(Activity)是最吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含零个或多个活动,但不包括任何活动的程序很少见。

2.2活动的基本用法

2.2.1手动创建一个活动

由于Android Studio在一个工作区间内只允许打开一个项目,因此首先需要将当前项目关闭,点击File->Close Project。然后再新建一个Android上项目,项目名字可以叫做ActivityTest,包名就使用默认的com.example.activitytest。

 

 

 

 

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

现在我们发现app/src/main/java/com.example.activitytest目录为空。我们右击com.example.activitytest包->New->Activity->Empty Activity,会弹出一个创建活动的对话框,我们将活动命名为FirstActivity,并且不要勾选Generate Layout File和Lanuncher Activity。因为勾选Generate Layout File 表示会自动为FirstActivity创建一个对应的布局文件,勾选Launcher Activity 表示会自动将FirstActivity设置为当前项目的主活动,下面我们来一个个手动完成。勾选Compatibility表示会为项目启动向下兼容的模式,这个选项要勾上。点击Finish完成创建。

项目中的任何活动都应当重写Activity的onCreate()方法,而目前我们FirstActivity中已经重写了这个方法,这是由于Android Studio 自动帮我们完成的,代码如下:

public class FirstActivity extends AppCompatActivity{

    @override

    protected void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState)

    }

}

 

可以看到,onCreate()方法非常简单,就是调用了父类的 onCreate()方法。当然,这只是默认的实现,后面我们还需要在里面加入很多自己的逻辑。

 

2.2.2创建和加载布局

 

Android程序设计讲究逻辑和视图分离,最好每一个活动都能对应一个布局,布局就是用来显示界面内容的,因此我们现在就来手动创建一个布局文件。

右击 app/src/main/res 目录->New->Directory,会弹出一个新建目录的窗口,这里先创建一个名为layout的目录。然后对着layout目录右击->New->Layout resourcre file,又会弹出一个新建布局资源文件的窗口,我们将这个布局文件命名为 first_layout,跟标签选择默认的LinearLayout,如图:

 

这时候我们可以看到一个布局编辑器。

 

在屏幕中央可以预览当前布局,而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>

 

由于我们在创建布局文件时候选择了LinearOut作为根元素,因此现在布局文件中已经有一个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="match_parent"

        android:layout_height="wrap_content"

        android:text="Button 1"/>

</LinearLayout>

 

这里添加了一个Button元素,并在Button元素中增加了几个属性。android:id是当前元素定义的唯一标识符,之后可以在代码中对元素进行操作。

android:layout_width指定了当前元素的宽度,这里使用matc_parent表示当前元素和父元素一样宽。

android:layout_height指定当前元素的高度,这里使用wrap_content表示当前元素的高度只需要和它的内容一样高就好了。

android:text指定了当前元素的文字内容。

 

接下来我们需要在在活动中加载这个布局。

重新回到FirstActivity中,在onCreate()方法中加入如下代码:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.first_layout);

}

 

可以看到,这里调用了 setContentView()方法来给当前活动加载了一个布局,我们一般都会传入一个布局文件的id。项目中的任何资源都会在R文件之中生成一个对应的id。

 

2.2.3在AndroidManifest文件中注册

 

所有的活动注册声明要放到<application>标签内,这里通过<activity>标签来对活动进行注册。

在<activity>标签中使用android:name来指定注册哪一个活动,那么这里的.FirstActivity是什么意思呢?其实就是com.example.activitytest.FirstActivity的缩写。

但是还没有结束,我们还要注册主的活动:

<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>

 

现在就可以使用了。

 

2.2.4在活动中使用Toast

Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它可以将一些短小的信息通知给用户,这些信息会在一段时间内自动消失,并且不会占用任何屏幕空间。

 

首先定义一个弹出Toast 的触发点,正好界面有一个按钮,我们就点击这个按钮弹出一个Toast吧。

在onCreate()方法中添入如下代码:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.first_layout);

    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()方法需要传入三个参数。第一个参数是Context,也就是Toast要求的上下文,由于活动本身就是一个Context对象,因此这里直接传入FirstActivity.this即可。第二个参数是Toast显示的文本内容,第三个参数是Toast的显示时长,有两个内置常量可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG。

效果如下:

 

 

2.2.5在活动中使用Menu

手机毕竟和电脑不同,它的屏幕空间非常有限,因此充分地利用屏幕空间在手机界面设计中就显得非常重要了。如果你的活动中有大量的菜单需要显示,这个时候界面设计就会显得比较尴尬,因为仅仅是菜单就可能占用屏幕三分之一的空间,那么该怎么办呢?不需要担心,Android给我们提供了一种方式,可以让菜单显示的同时,还不用占用任何屏幕空间。

首先在res目录下面新建一个menu文件夹,右击res目录->New->Directory,输入文件名menu,点击OK。接着在这个文件下再新建一个名叫main的菜单文件,右击menu文件夹->New->Menu resource file,如下所示:

在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中来重写onCreateOptionsMenu()方法,重写方法可以使用Ctrl+O快捷键,如下所示:

 

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

当然,仅仅让菜单显示是远远不够的,菜单要可以使用,因此还要定义菜单响应事件。在FirstActivity中重写onOptionsItemSelected()方法:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main,menu);

    return true;

}



@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;

}

效果如下:

 

2.2.6销毁一个活动

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

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

 public void onClick(View view) {
                //Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();
                finish();
            }

重新运行程序,这时点击一下按钮,当前的活动就被成功销毁了,效果和按下Back键是一样的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值