《第一行代码—— Android 休闲学习(一)
《第一行代码》—— Android 休闲学习(一)
日志工具使用
先用import android.util.Log;
来导入所需库函数
Log.v() // verbose
Log.d() // debug
Log.i() // info
Log.w() // waring
Log.e() // error
日志的等级从上到下依次增高。
日志样式:
07-16 19:37:03.494 15142-15142/com.example.patrick.activitytest D/FirstActivity: Hello FirstActivity
其中FirstActivity
是 tag,为了方便过滤日志,Hello FirstActivity
是日志的内容
使用:
// 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(这里是点击按钮触发)
// 获取元素,返回值是 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()
来判断点击的是哪个菜单项
- 通过
销毁活动
finish() // 相当于按返回键
使用 Intent 切换活动
显式 Intent
直接指明了要切换的目的活动。
源活动
// 第一个参数是启动活动的上下文
// 第二个参数是要启动的目标活动的类
Intent intent = new Intent(FirstAcitity.this, SecondActivity.class);
// 用来启动活动
startActivity(intent);
隐式 Intent
并不明确指明要启动的活动,而是指定了更为抽象的 action 和 category 等信息,然后交由系统来启动目的活动,可以是同一个应用的活动,也可以是其他应用的活动。
使用方法:
- 在 AndroidManifest.xml 文件中指明 action 与 category
- 在活动中使用 Intent
// 只有当二者的 action 和 category 完全匹配才能响应 Intent // 隐式 Intent 使用 action 来初始化实例的 Intent intent = new Intent("和前面指明的 action 内容相同"); intent.addCategory("和前面指明的 category 内容相同"); startActivity(intent);
隐式 Intent Plus
// 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() 取出数据
源活动
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// putExtra 接受两个参数,第一个参数是 key,用来在目的活动取出数据
// 第二个参数是数据
intent.putExtra("extra_data", data);
startActivity(intent);
目的操作
Intent intent = getIntent();
// 通过 key 来取出数据并保存在 data 里面
String data = intent.getStringExtra("extra_data");
用 Intent 返回数据给上一个活动
startActivityForResult() 启动活动并且在活动销毁的时候能够返回结果给上一个活动。
源活动按钮的点击事件
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// 第二个参数是请求码,唯一,用来区分不同请求
startActivityForResult(intent, 1);
目的活动
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
// 专门用来向上一个活动返回数据
// 第一个参数是处理结果,第二个参数是 Intent
setResult(RESULT_OK, intent);
finish();
源活动接受数据
// 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:
}
}