《第一行代码—— Android 休闲学习(一)

《第一行代码》—— Android 休闲学习(一)

日志工具使用

先用import android.util.Log;来导入所需库函数

1
2
3
4
5
Log.v()  // verbose
Log.d() // debug
Log.i() // info
Log.w() // waring
Log.e() // error

日志的等级从上到下依次增高。

日志样式:

1
07-16 19:37:03.494 15142-15142/com.example.patrick.activitytest D/FirstActivity: Hello FirstActivity

其中FirstActivity是 tag,为了方便过滤日志,Hello FirstActivity是日志的内容

使用:

1
2
// tag 一般传入当前的类名
Log.d(tag, msg);

小技巧

在 onCreate() 方法的外面输入 logt,然后按下 Tab 键,这时候就会以当前的类名作为值自动生成一个 TAG 常量
例如:private static final String TAG = “HelloWorldActivity”;

活动

活动是一种可以包含用户界面的组件,主要用于和用户进行交互。我们看到的页面就是活动。

活动的基本用法

  • 创建活动:在 /ActivityTest/app/src/main/java/com.example.patrick.activitytest 下创建活动
  • 创建和加载布局(可以自动完成)
    • 在app/src/main/res 下创建 layout 目录,再在这个目录下创建布局文件
    • 可以在这个文件里面增添元素(要使用的话得在活动中定义动作)
    • 在活动中重写 onCreate 来加载布局,使用 setContentView()
  • 在 AndroidMainfest 文件中注册(自动完成)
  • 配置主活动(一个程序至少要有一个,不然就不能在启动器中看到和打开程序)

在活动中使用 Toast

Toast 是在接近底部的地方弹出的提示

  • 触发 Toast(这里是点击按钮触发)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 获取元素,返回值是 View 对象,要下转型成 Button 对象
Button button1 = (Button) findViewById(R.id.button_1);
// 注册监视器,监视点击事件
button1.setOnClickListener(new View.OnClickListener() { // 匿名类
@Override
public void OnClick(View v) {
// 通过静态方法创建 Toast 对象并通过 .show() 来使用
// 第一个参数是 Toast 的上下文,直接传入活动就可以
// 第二个参数就是 Toast 显示的文本
// 第三个参数是 Toast 显示的时长
Toast.makeText(FirstActivity.this, "You clicked Button 1",
Toast.LENGTH_SHORT).show();
}
});

小技巧

按 Ctrl-O 可以方便地重写方法

在活动中使用 Menu

Menu 是页面右上角的三个竖着的小点点。

使用 Menu

  • 在 res 目录下新建 menu 文件夹,并且在该目录下创建菜单文件
    • 在该文件通添加菜单项
    • android:id 是菜单项的标识符,在活动中用R.id.标识符名来引用
    • android:title 是菜单的名称(显示在菜单中)
  • 在活动中重写 onCreateOptionsMenu() 方法来初始菜单,可以使用 Ctrl + O 快捷键
  • 定义菜单相应事件,通过重写 onOptionsItemSelected() 方法
    • 通过 item.getItemId() 来判断点击的是哪个菜单项

销毁活动

1
finish()  // 相当于按返回键

使用 Intent 切换活动

显式 Intent

直接指明了要切换的目的活动。

源活动

1
2
3
4
5
// 第一个参数是启动活动的上下文
// 第二个参数是要启动的目标活动的类
Intent intent = new Intent(FirstAcitity.this, SecondActivity.class);
// 用来启动活动
startActivity(intent);

隐式 Intent

并不明确指明要启动的活动,而是指定了更为抽象的 action 和 category 等信息,然后交由系统来启动目的活动,可以是同一个应用的活动,也可以是其他应用的活动。

使用方法:

  • 在 AndroidManifest.xml 文件中指明 action 与 category
  • 在活动中使用 Intent
    1
    2
    3
    4
    5
    // 只有当二者的 action 和 category 完全匹配才能响应 Intent
    // 隐式 Intent 使用 action 来初始化实例的
    Intent intent = new Intent("和前面指明的 action 内容相同");
    intent.addCategory("和前面指明的 category 内容相同");
    startActivity(intent);

隐式 Intent Plus

1
2
3
4
5
6
// Intent.ACTION_VIEW 是一个 Android 内置的动作
// 对应的 xml 文件中的值是 android.intent.category.VIEW
Intent intent = new Intent(Intent.ACTION_VIEW);
// setData() 接受一个 Uri 对象,指定操作的数据(注意不是 Url)
intent.setData(Uri.parse("https://blog.patrickcty.cc"));
startActivity(intent);

用 Intent 向下一个活动传递信息

使用 putExtra() 发送数据,在目的活动中使用 getStringExtra() 取出数据

源活动

1
2
3
4
5
6
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// putExtra 接受两个参数,第一个参数是 key,用来在目的活动取出数据
// 第二个参数是数据
intent.putExtra("extra_data", data);
startActivity(intent);

目的操作

1
2
3
Intent intent = getIntent();
// 通过 key 来取出数据并保存在 data 里面
String data = intent.getStringExtra("extra_data");

用 Intent 返回数据给上一个活动

startActivityForResult() 启动活动并且在活动销毁的时候能够返回结果给上一个活动。

源活动按钮的点击事件

1
2
3
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// 第二个参数是请求码,唯一,用来区分不同请求
startActivityForResult(intent, 1);

目的活动

1
2
3
4
5
6
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
// 专门用来向上一个活动返回数据
// 第一个参数是处理结果,第二个参数是 Intent
setResult(RESULT_OK, intent);
finish();

源活动接受数据

1
2
3
4
5
6
7
8
9
10
11
12
13
// requestCode 就是上面唯一的请求码
// resultCode 就是处理结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
}
break;
default:
}
}