zoukankan      html  css  js  c++  java
  • Android Studio 单刷《第一行代码》系列 03 —— Activity 基础

    前情提要(Previously)

    本系列将使用 Android Studio 将《第一行代码》(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Android Studio 作为开发 IDE 的同学开路。
    PS:其实我就是现学现卖,希望我能坚持刷完。

    在 Day 1、Day 2,我们创建了第一个App project,并分析了项目结构、运行原理,实践了 LogCat 的使用。

    系列目录在此:

    摘要(Abstract)

    Activity 是 一个 App 的脸面,而这又是一个看脸的世界,那就让我们从脸开始吧。这篇都是基础的罗列,没有什么值得注意的地方。

    Activity 的基本用法

    跟着书走,先创建一个 ActivityTest 的项目,注意在选择 Activity 的时候,选择 Add No Activity。如下图

    no activity

    创建活动

    在 app/src/mani/java/com.xxx.ActivityTest 目录上点击右键 → New,这里有两种选择:

    • 选择 Java Class,新建一个名为 FirstActivity 的类,并 extends Activity,重写 onCreate() 方法。代码可以参考之前的 HelloWorld。
    • 选择 Activity,系统会生成一个 Activity,以及相关的布局文件 Layout,并在 AndroidManifest.xml 中注册。

    如下图

    new activity

    创建和加载布局

    新创建好的项目是没有 Layout 目录的,在 app/src/main/res 目录上点右键 → New → Android resource directory,在弹出的对话框中将 Resource type 选为 layout。

    然后在 res/Layout 目录上点右键 → New → Layout resource file,在弹出的对话框中填上名字,Finish,这样就创建好了。

    打开文件,可以向里面添加一个 Button 控件试试看。

    注册

    Activity 必须在 AndroidManifest.xml 文件中注册才可以使用,代码如下:

        <activity
            android:name=".FirstActivity"
            android:label="FirstActivity" >
        </activity>
    

    如果想让其在 App 运行时打开,还需要添加 intent-filter,代码如下:

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

    隐藏标题栏

    在 Activity 的 onCreate()方法中添加 requestWindowFeature(Window.FEATURE_NO_TITLE);

    PS:在这里我遇到个坑,我创建的继承 Activity 的 活动默认就不显示标题栏,而且我也不知道怎么能让标题栏显示出来。

    消息提示 Toast

    Toast 是 Android 提供的一种非常好的提醒方式,在程序中可以使用她将一些短小的信息通知给用户,这些信息会在一段时间后自动消失。

    例子是这样的,在 onCreate() 方法中,给 Button 绑定一个点击事件,再点击 Button 时显示一条信息,代码如下:

        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(FirstActivity.this, "you clicked button 1", Toast.LENGTH_SHORT).show();
            }
        });
    

    PS:我多么希望 HTML 中也有这样的元素啊。

    我真心觉得 Menu 没什么好讲的。

    Activity 跳转

    创建一个名为 SecondActivity 的 Activity(好绕口)。

    例子是这样的,在 FirstActivity 中点击 Button 后跳转到 SecondActivity。代码如下:

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
    

    传递数据

    例子是这样的,在 FirstActivity 中点击 Button 后跳转到 SecondActivity,并将一个字符串传过去。
    1.FirstActivity 中发送代码如下:

        Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
        String data = "hello second";
        intent.putExtra("extra_data", data);
        startActivity(intent);
    

    2.SecondActivity中,在 onCreate() 方法中,接收代码如下:

        Intent intent = getIntent();
        String data = intent.getStringExtra("extra_data");
    

    返回数据

    需要用 startActivityForResult() 来代替 startActivity() 方法。

    例子是这样的,在 FirstActivity 中点击 Button 后跳转到 SecondActivity,然后点击返回键返回到 FirstActivity,并返回一个字符串。

    1.FirstActivity 中发送代码如下:

        startActivityForResult(intent, 1);
    

    其中的第二个参数 requestCode,用于在之后的回调方法中判断数据的来源。要保证在当前 Activity 中的唯一性。

    2.SecondActivity中,重写点击返回键时触发的 onBackPressed() 方法,代码如下:

    @Override
    public void onBackPressed(){
        Intent intent = new Intent();
        intent.putExtra("data_return","hello first");
        setResult(RESULT_OK, intent);
        finish();
    }
    

    3.当从 SecondActivity 返回时,会回调上一个活动的 onActivityResult() 方法,所以需要重写 FirstActivity 的 onActivityResult() 方法来获取返回的数据,代码如下:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("FirstActivity", returnedData);
                }
                break;
            default:
        }
    }
    

    其它(Miscellaneous)

    尽管我试图在本文中尽量完整的进行描述,但受限于篇幅和我的个人水平,本文难免有所遗漏,欢迎在评论中指出。
    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!

    关于作者(About Me)

    addict
    原文链接:http://www.cnblogs.com/DebugLife/p/4349428.html

    本文谢绝转载,如需转载需征得作者本人同意,谢谢。

  • 相关阅读:
    Educational Codeforces Round 10 C. Foe Pairs 水题
    Educational Codeforces Round 10 B. z-sort 构造
    CDOJ 1048 Bob's vector 三分
    Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
    第14届电子科大初赛民间盗版部分题目题解
    HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
    HDU 5653 Bomber Man wants to bomb an Array. dp
    HDU 5652 India and China Origins 二分+并查集
    HDU 5651 xiaoxin juju needs help 数学
    HDU 5650 so easy 数学
  • 原文地址:https://www.cnblogs.com/DebugLife/p/4349428.html
Copyright © 2011-2022 走看看