1. 包名显示切换
记录1 - 包名显示切换2. 设置启动页面
记录2 - 设置启动页面3. 隐藏导航栏
默认显示 actionBar
去掉 actionBar 的显示
4. match_parent 和 wrap_content 的区别
-
match_parent
:完全匹配父布局大小,大小与父布局有关。(表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小) -
wrap_content
:自适应大小,大小与内容有关。( 表示让当前的控件大小能够刚好包含里面的内容,也就是由控件内容决定当前控件的大小)
5. 目前常用的网络框架
- volley(由Google推出)
- 安卓系统api
-
okhttp
(推荐使用!非常高效,支持 SPDY,连接池,GZIP / 压缩 JSON 和 HTTP 缓存,Cookie)
6. 项目中如何引入第三方框架
- 手动添加 jar 包
参考:https://jingyan.baidu.com/article/fdbd427789d604b89f3f4859.html - 使用 Gradle 引入:(下面是使用 Gradle 引入 okhttp 框架的三种方式)
方式1:compile 'com.squareup.okhttp3:okhttp:3.12.1'
方式2:api 'com.squareup.okhttp3:okhttp:3.12.1'
方式3(推荐使用!):implementation 'com.squareup.okhttp3:okhttp:3.12.1'
使用 Gradle 引入框架时,编译项目 Android Studio 就会自动帮我们去下载。
- Android 中 gradle 文件中 implementation 、 compile 和 api 三者的异同:
implementation 不可以依赖传递,compile 和 api 可以依赖传递。
举例说明:
如果一个 App 依赖于 libA,libA 又依赖于 libB,使用 implementation 时 App 不可以调用 libB 中的方法,使用 compile 时则可以调用。推荐还是 implementation,避免跨依赖调用,导致模块之间耦合性过高,管理起来混乱。
compile 或 api 关键字作用效果是一样的,使用时可以互相替换。实际上,api 关键字是用来替代 compile 关键字的,因为compile
关键字将来会被弃用(Android Studio 3.0 以后已废弃)
。在高版本的 gradle,使用 compile 关键字会报错并提示使用 api 关键字代替。
-
特别提示:
引入 okhttp:3.13 及以上版本的库,在 Android4.x 系统上运行会报如下错误,所以如果项目要兼容 Android4.x 系统,可以选择引入 okhttp:3.12.1 版本的库。
7. 设置全屏显示(隐藏系统状态栏)
// 设置全屏显示(隐藏系统状态栏),支持Android2.0以上
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
8. 在清单文件中添加网络访问权限
<uses-permission android:name="android.permission.INTERNET" />
在 Android 6.0 之前是通用的,直接在 AndroidManifest.xml 文件中进行注册即可。
在 Android 6.0 之后加入了运行时权限,申请权限访问需要两步:
1》先在清单文件 AndroidManifest.xml 文件中进行注册
2》在运行的时候,还要使用代码来申请。
9. okttp 框架简单的使用
/* 一个简单的网络请求 */
public void getNewListData() {
// 1.创建 OkHttpClient 实例对象
OkHttpClient client = new OkHttpClient();
// 2.创建 Request 对象
Request request = new Request.Builder()
.url("https://3g.163.com/touch/reconstruct/article/list/BBM54PGAwangning/0-10.html")
.get()
.build();
// 3.执行 Request 请求(异步执行)
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 请求失败
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
// 请求成功,获取接口的数据
String data = response.body().string();
Log.i("okHttp的请求结果:", data);
} else {
// 请求失败
Log.i("okHttp的请求失败:", null);
}
}
});
}
10. gson 框架简单的使用
// 判断字符串是否为空
if (!TextUtils.isEmpty(data)) {
// 数据解析:Json字符串转对象
Ads ads = new Gson().fromJson(data, Ads.class);
if (null != ads) {
Log.i("数据解析成功", ads.toString());
}
}
11. service 和 intentService
- service 会造成 nar,不能做耗时的操作(4大组件都不能做耗时操作)。
- 做耗时操作除了可以用子线程外,还可以使用 intentService,intentService 用法和 service 一样,开启以后就在后台开始跑,跑完以后就会自己关闭,不需要去管它。
- 举例:可以使用 intentService 去下载网络图片
Serializable(序列化):对象转换成数据流,对象就可以在网络上传输,在另一边接收的时候再把数据流转化成对象。
编码习惯:不要使用硬编码,即不能直接把常量写死进行使用,需要封装起来进行使用。
12. 加载网络图片(glide 框架)
- 使用 Gradle 引入框架:
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
- 框架的使用:
Glide.with(this).load(imageUrl).into(adsImageView);
// 或
Glide.with(this).load(imageUrl).placeholder(R.drawable.loading_spinner).into(adsImageView);
- 回到主线程(UI线程)更新页面
// 在主线程中更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
// 执行更新操作
}
});
- 生成0~N之间的随机数
Random rand = new Random();
int randNum = rand.nextInt(N);
// 生成 0-N 之间的随机数,包括 0,不包括 N。
- 给图片设置点击事件
// 给图片设置点击事件
adsImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
- Handler 的功能:
1》切换线程
13. Java中没有枚举类型,在实际开发中要学会定义常量来代替枚举类型
// 建造师
public static final int TYPE_BUILDER = 0;
//人员
public static final int TYPE_WORKER = 1;
int mType = TYPE_BUILDER;
网友评论