美文网首页Android开发入门教程
Android开发学习 -- Day2 探究Activity(一

Android开发学习 -- Day2 探究Activity(一

作者: h080294 | 来源:发表于2018-03-19 00:17 被阅读59次

    在上一章的学习中,我们已经掌握并成功的创建了自己Android项目。那么接下来,应该开始学习Android的四大组件了,Activity、Service、ContentProvider、 BroadcastReceiver,并且我们要从看得见的地方入手 -- Activity。

    一、Activity的概念

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

    二、Activity的基本用法

    虽然在Hello World项目中Android Studio帮我们创建了一个默认的Activity,但是通过手动创建更可以加深对Activity的了解。因此,新建一个项目,选择Add No Activity。

    1、手动创建Activity

    创建好后,我们看到了熟悉的目录,只是在com.johnhao.testdemo中是空的了。

    下面我们可以手动创建Activity了。现在右击 com.cxamplcactivitytcst 包New->Activity->Empty Activity ,会弹出一个创建Activity的对话框,我们将活动命名为FirstActivity,并且不要勾选Generate LayoutFile 和 Launcher Activity这两个选项(因为我们要练习自己创建)。

    勾选Generate LayoutFile表示会自动为FirstActivity创建一个对应的布局文件,勾选Launcher Activity表示会自动将FirStActivity 设置为当前项目的主Activity。这里因为咱们要手动创建活动,所以这些自动生成的东西暂时都不勾选。勾选 Backwards Compatibility表示会为项目启用向下兼容的模式,点击 Finish完成创建。

    我们知道任何类型的Activity都应该重写onCreate方法,这里Android Studio已经帮我们完成了。

    2、创建和加载布局(Layout)

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

    右击app/src/main/res 目录->New->Directory,先创建一个名为Layout的目录,然后在layout目录创建一个Layout resource file。给他起个名字first_layout,根元素选默认的LinearLayout就可以。

    来编辑一下布局文件,添加一个Button控件。我在Button元素内部添加了一些属性:id、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">
    
        <Button
            android:id="@+id/btn_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/app_name"/>
    
    </LinearLayout>
    

    完成了简单的布局编辑,我们接下来要做的就是在Activity中加载这个布局。
    回到FirstActivity,在onCreate中加入setContentView代码

    public class FirstActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.first_layout);
        }
    }
    

    可以看到, 这里调用了 setContentView()方法来给当前的活动加载一个布局, 而在setContentView()方法中, 我们一般都会传入一个布局文件的id。 我们知道,项目中添加的任何资源都会在 R文件中生成一个相应的资源id,因此我们刚才创建的first_layout.xml布局的id已经添加到R文件中了。将R.layout.first_layout传给setContentView()方法,就可以加载这个布局了。

    3、注册Activity

    在学习Activity的知识的时候,我们了解到所有的Activity都要在Manifest中注册才能生效。而智慧的Android Studio已经帮我们自动添加了,打开AndroidManifest可以看到已经存在activity的标签。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.johnhao.testdemo">
    
        <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"></activity>
        </application>
    
    </manifest>
    

    不过目前为止,程序仍然不能运行,因为我们还没配置主Activity。添加如下代码,设置主Activity后,我们的app就能运行了。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.johnhao.testdemo">
    
        <application
            ...>
            <activity android:name=".FirstActivity"
                android:label="First Activity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    4、在Activity中使用Toast

    Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户。这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。
    首先定一个触发点,我们在布局上设置了一个按钮,所以我们让点击按钮的时候弹出一个Toast。修改onCreate()方法,添加如下代码:

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.first_layout);
            Button btn_toast = findViewById(R.id.btn_1);
            btn_toast.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(FirstActivity.this, "You click the Button", Toast.LENGTH_LONG).show();
                }
            });
        }
    

    在Activity中,通过findViewById()获取到在布局文件中定义的元素,这里我们传入R.id.btn_1,来得到按钮的实例。接下来通过调用setOnClickListener()方法为按钮注册一个监听器,点击按钮的时候就会执行监听器中的onClick()方法。

    Toast的用法也很简单,通过静态方法makeText()创建一个Toast对象,然后调用show()发法展示Toast就可以了。makeText需要三个参数,第一个是Context,第二个是要显示的内容,第三个是Toast的显示时长。现在重新Run一下,点击按钮就能看大Toast提示了。

    5、在Activity中使用Menu

    接下来我们尝试在Activity创建一个菜单。在res目录创建一个menu文件夹,res -> New -> Directory。然后在menu文件夹下新建一个Menu resource file。在xml中添加代码,这里我们添加一个菜单,用<item>标签表示。

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item
            android:id="@+id/menu_exit"
            android:title="@string/exit"/>
    
    </menu>
    

    回到FirstActivity中,重写onCreateOptionsMenu()方法,mac上可以使用快捷键⌃ + o。

    在onCreateOptionsMenu()添加代码:

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

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

    创建了菜单,我们还得给它添加对应的相应事件,要不添加它干嘛。重写onOptionsItemSelected()方法。

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.menu_exit:
                    finish();
                    break;
                default:
            }
            return true;
        }
    

    在onOptionsItemSelected()方法中,通过调用item.getItemId()来判断点击的是哪一个item选项。这里我们提供一个销毁Activity的方法finish()。重新运行下程序,点击菜单退出,让我们来看看效果:

    到这里第二天的学习就结束了。回顾一下,我们通过手动创建Activity和手动加载布局并注册到Manifest,更深入的了解了Activity的创建过程。并且学习到了如何在Activity中使用Toast,以及给我们的应用添加菜单。

    关注获取更多

    相关文章

      网友评论

        本文标题:Android开发学习 -- Day2 探究Activity(一

        本文链接:https://www.haomeiwen.com/subject/navlqftx.html