Android冒险之旅
从郭霖老师的《第一行代码Android2》起步,对遇到的知识点加以理解和一定程度的深入,然后把这个过程记录下来,形成自己的Android知识体系。
一念断星河
生而平凡,向往非凡。
展开
-
Android冒险之旅-32-Bundle
介绍Bundle,是Android开发中的一个类,用于Activity之间传输数据用。传递基本数据类型1. 发送数据 //使用Bundle封装基本数据类型 Bundle bundle = new Bundle(); bundle.putString("name","alin"); bundle.putInt("age",22); //原创 2021-01-28 14:14:04 · 185 阅读 · 0 评论 -
Android冒险之旅-31-Handler
一、Handler的定义主要接受子线程发送的数据, 并用此数据配合主线程更新UI。解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,例如: 联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完...原创 2021-01-28 13:46:27 · 363 阅读 · 0 评论 -
Android冒险之旅-30-四大组件
目录1. 活动(Activity)定义:生命周期:四种启动方式:2. 服务(Service)定义:生命周期:Start:Bind:3.广播接受者(Broadcast Receive)4.内容提供者(Content Provider)END1. 活动(Activity)定义:Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用setContentV.原创 2021-01-28 13:26:41 · 186 阅读 · 1 评论 -
Android冒险之旅-29-误删还原
误删了layout文件夹,里面有四十多个布局文件,还没发撤销,还好稳住心态找了以下补救措施:选中项目 --> 右键 --> local history --> show history --> 选中一个版本右键 --> revertEND原创 2021-01-23 00:23:18 · 227 阅读 · 0 评论 -
Android冒险之旅-28-PopupWindow的简单使用
目录效果图Activity代码布局END效果图Activity代码 @OnClick({R.id.search_type}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.search_type: //调用显示PopupWindow showPopupWin...原创 2021-01-19 23:02:13 · 167 阅读 · 0 评论 -
Android冒险之旅-27-关闭软键盘
//关闭键盘 public void CloseKeyBoard() { View view = getWindow().peekDecorView(); if (view != null) { InputMethodManager inputmanger = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputmanger.hide...原创 2021-01-19 21:04:58 · 184 阅读 · 0 评论 -
Android冒险之旅-26-DrawerLayout的简单使用
目录效果图布局ActivityEND效果图布局<?xml version="1.0" encoding="utf-8"?><androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns.转载 2021-01-19 13:42:34 · 267 阅读 · 1 评论 -
Android冒险之旅-25-解决xml中自定义View的属性不提示的问题
问题:在XML中不自动提示自定义View的自定义属性产生原因:可能对原本的自定义View类升级或改名之后 导致类名与初始定义的属性集合名不一致从而产生的问题END原创 2020-12-19 18:14:42 · 500 阅读 · 3 评论 -
Android冒险之旅-24-自定义View--涟漪+分裂+自定义点击行为
RippleView3效果图结合打印日志观看 用户点击中心圆输出0 点击分裂对象输出分裂对象对应序号说明在之前的RippleView2的基础上 增加了分裂效果 我称之为RippleView3上一篇博客连接- -> RippleView2RippleView3升级功能:中心圆点击监听 被点击之后会自动分裂 同时标识:clickResult=0 分裂对象点击监听 被点击之后会复原到涟漪扩散状态 同时...原创 2020-12-19 16:30:33 · 277 阅读 · 2 评论 -
Android冒险之旅-23-自定义View--涟漪+分裂效果
效果图说明在之前的RippleView的基础上 增加了分裂效果 我称之为RippleView2升级功能:分裂两个 水平堆成分布 分裂三个 三角形分布 分裂四个 对称分布 复原 回到涟漪荡漾状态基础功能:中心圆控制 开启 / 关闭 / 修改颜色 涟漪控制 开启 / 关闭 / 修改颜色 初始半径控制 涟漪初始大小与中心圆大小一致 涟漪扩散速度控制 实际上就是一个...原创 2020-12-17 21:08:47 · 335 阅读 · 0 评论 -
Android冒险之旅-22-自定义View--涟漪效果|波浪效果
效果图希望是你们心心念念的有涟漪、波浪效果的自定义View代码人狠话不多 注释超级详细不要被长度吓到 开放性很高 所有属性基本都可以修改 因此GetSet方法很多/** * create by 星航指挥官 * create on 2020/12/13 * 不过是大梦一场空 * 课不过是孤影照惊鸿 */public class RippleView extends View { //中心点坐标 private float x = 0; priva.原创 2020-12-16 23:39:05 · 455 阅读 · 0 评论 -
Android冒险之旅-21-okhttp的使用与自定义接口监听
1. 添加依赖 // Okhttp框架 implementation 'com.squareup.okhttp3:okhttp:4.9.0'2. 同步请求 /* * 同步请求 * */ public void synRequest(String url,Map<String, Object> params) { // 创建OkHttpClient对象 OkHttpClient okHttpClient原创 2020-11-24 21:09:05 · 429 阅读 · 0 评论 -
Android冒险之旅-20-创建随机验证码
/** * create by 星航指挥官 * create on 2020/11/23 * 不过是大梦一场空 * 不过是孤影照惊鸿 */public class VerificationCode { /** * 创建指定数量的随机字符串 * @param isNumber 是否是数字 * @param length * @return */ public static String getVerificationCode(bo.原创 2020-11-23 16:23:06 · 130 阅读 · 0 评论 -
Android冒险之旅-19-极光推送的简单使用
极光推送简介 极光推送,英文简称 JPush,是一个面向普通开发者开放的,免费的第三方消息推送服务。自动集成1. 配置 jcenter 支持在Project 级 build.gradle 中配置jcenter 支持。(新建 project 默认支持)buildscript { repositories { jcenter() } ......}allprojects { repositories { jcenter()原创 2020-11-21 23:36:27 · 691 阅读 · 0 评论 -
Android冒险之旅-18-手机与平板适配的思路
1. 总体思路 为主页面设计两个同名布局,分别为单页布局(手机),双页布局(平板)。单页布局存放在layout目录下,双页布局存放在layout-sw600dp目录下。运行时系统会根据具体设备选择合适的布局。在java代码中通过一个特殊的控件ID(比如双页有单页没有的)来判断当前显示的是单页模式还是双页模式。如果是双页模式,那么资源直接加载,如果是单页模式,那么某个点击操作触发之后跳转到另一页面。 本文案例:郭霖大神第四章碎片的最佳实践,一个简易版新闻应用。2. 主页面布局(单页)layout原创 2020-08-31 12:07:21 · 285 阅读 · 0 评论 -
Android冒险之旅-17.5-ButterKnife在碎片中使用的坑
为什么这篇文章在冒险之旅的系列中不是18而是17.5,因为这篇文章记录一个让我贼难受的坑。报错: android.view.InflateException: Binary XML file line #7: Error inflating class fragment还有 Attempt to invoke virtual method ‘void androidx.recyclerview.widget.RecyclerView.setLayoutManager(androidx.原创 2020-08-31 01:41:34 · 281 阅读 · 0 评论 -
Android冒险之旅-17-Fragment碎片的使用
效果图话不多说,直接上代码,注释详细1. activity_fragment.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas原创 2020-08-30 16:35:24 · 167 阅读 · 0 评论 -
Android冒险之旅-16-模拟聊天
使用RecycleView显示聊天消息,使用Nine-patche图片作为聊天气泡,实现我和我自己聊天。素材可以去阿里巴巴矢量图标库下载,然后可以通过我上上篇博客学习RecycleView的使用,通过上一篇博客学习制作Nine-Patch图片。效果图1. activity_chat.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com.原创 2020-08-30 14:38:23 · 162 阅读 · 0 评论 -
Android冒险之旅-15-Nine-Patch图片
Nine-Patch 当图片的宽高不足填满控件时会被均匀拉伸,但是很多时候我们想要自定义拉伸区域,比如对话框气泡,我们可以自己制作一张Nine-Patch图片,来控制拉伸区域。创建方式1.在AndroidStudio2.3开始,对任意一张PNG图片右击→Create9-Patch file。2.打开创建的Nine-Patch图片3.鼠标左键在图片边缘拖动即可添加黑色的区域左边框和上边框控制拉伸区域下边框和右边框控制内容显示区域kee...原创 2020-08-30 12:02:46 · 163 阅读 · 1 评论 -
Android冒险之旅-14-RecycleView(线性,网格,瀑布流)
RecycleView本文介绍 实现了RecycleView的三种布局,线性布局,网格布局,瀑布流布局 适配器和Activity基本每条语句都有注释 还有适配器中,在两个方法中设置点击事件的比较: 在Adapter.onBindViewHolder()中设置点击事件: 优点:可以直接获取位置,有position参数 缺点:会为当前显示的以及缓存的View都设置一个Listener回调,浪费内存。 在onCreateViewHolder()中设置点击事件:原创 2020-08-29 23:43:02 · 298 阅读 · 0 评论 -
Android冒险之旅-13-ListView的使用与优化
1. 简单使用1.1 效果图1.2 布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"原创 2020-08-27 23:56:55 · 530 阅读 · 0 评论 -
Android冒险之旅-12-AlertDialog的简单使用
1.效果图2. AlertDialogUtils工具类/** * create by 星航指挥官 * create on 2020/8/27 * 我为天帝 当镇压世间一切敌 * 遮天 */public class AlertDialogUtils { public static void show(Context context) { //使用Dialog、设置style final Dialog dialog = new Dialog(conte原创 2020-08-27 20:56:22 · 191 阅读 · 0 评论 -
Android冒险之旅-11-定制ProgressBar
1. 基础使用 <ProgressBar android:id="@+id/pb" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/Widget.AppCompat.ProgressBar.Horizontal" android:max="100" android:progre原创 2020-08-27 09:18:46 · 180 阅读 · 0 评论 -
Android冒险之旅-10-常用控件的简单使用
1. TextView <TextView android:id = "@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/String1" android:textSize="24sp" android:textColor="@color/wh原创 2020-08-27 00:43:13 · 158 阅读 · 0 评论 -
Android冒险之旅-9-便捷式启动需要参数的Activity
启动活动的最佳写法 启动活动的方法一般是构建一个Intent,然后使用startActivity()或者startActivityForResult()方法,如果有数据需要传递,也可以用Intent.putExtra()等方法来完成。 假设SecondActivity中需要用到两个很重要的数据,在启动SecondActivity时必须将这两个数据传入,那么我们可以这样写: Intent intent = new Intent(this, SecondActivity.原创 2020-08-25 23:54:17 · 175 阅读 · 0 评论 -
Android冒险之旅-8-BaseActivity、ActivityCollector的使用
1.BaseActivity 创建一个BaseActivity类继承AppCompatActivity类用来写所有活动公共的方法,方便更好的管理活动。当创建其他活动时直接继承BaseActivity。公共方法就比如活动启动时打印类名,这样在阅读别人代码时不至于找不到对应的活动。/** * create by 星航指挥官 * create on 2020/8/25 * 我为天帝 当镇压世间一切敌 * 遮天 */public class BaseActivity extends AppComp原创 2020-08-25 19:29:37 · 453 阅读 · 0 评论 -
Android冒险之旅-7-Activity的4种启动模式
Activity的启动模式 启动模式一共有四种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给标签指定android:launchMode属性来选择启动模式。 <activity android:name=".lifecycle.LifeCycleActivity" android:launchMode="standard">原创 2020-08-25 19:28:13 · 196 阅读 · 0 评论 -
Android冒险之旅-6-Activity的生命周期
活动的生命周期 活动是我们在进行Android开发过程中接触最多也必须接触的组件,掌握活动的生命周期对任何Android开发者来说都非常重要。1. 返回栈 Android 是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack).在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们按下 Back 键或调用 finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新处于原创 2020-08-25 19:27:37 · 195 阅读 · 0 评论 -
Android冒险之旅-5-color资源分享
1. 在布局文件中使用 <TextView android:layout_width="wrap_content" android:textColor="@color/mypink" android:layout_height="wrap_content" android:textSize="30sp" android:text="SubMenuActivity" />2. 在java代码中使用 textv原创 2020-08-25 10:45:30 · 232 阅读 · 0 评论 -
Android冒险之旅-4-Activity的跳转(显式隐式、传值回传)
使用Intent在Activity之间跳转 一个完善的应用除了一开始默认启动的Main Activity之外,还有其他不同用途的Activity。比如说登录注册页面和主页面;那么怎么从一个Activity跳转到另一个Activity呢?那就是Intent(意图)。Intent的作用很多,本篇文章暂时只介绍它的基础用法——Activity跳转;1.显式跳转——明确指出目标Activity//使用startActivity()方法启动Activity,用Intent声明目标ActivityInt原创 2020-08-24 22:34:22 · 509 阅读 · 0 评论 -
Android冒险之旅-3-三种Menu的使用(Option Menu、Sub Menu、Context Menu)
一、选项菜单(Option Menu)Tips: 选项菜单出现在标题栏右侧,如果设置了无标题栏那就看不见了效果图:具体实现步骤Tips:菜单项可以提前写好引用,也可以动态生成,下面步骤包含两种实现方式1.在res→menu目录下创建菜单项main.xml(目录不存在就自己创建)2.main.xml代码<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android原创 2020-08-24 18:50:40 · 1277 阅读 · 0 评论 -
Android冒险之旅-2-Toast的使用与优化
介绍Toas是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间之后自动消失,并且不会占用任何屏幕空间。效果图:Tips: 可以看到系统自带Toast采用的是队列的方式, 等当前Toast消失后, 下一个Toast才能显示出来;原因是Toast的管理是在队列中,点击一次,就会产生一个新的Toast,要等这个队列中的Toast处理完,这个显示Toast的任务才算结束。 我们可以把Toast改成单例模式,没有Toast再新建它,这样也就解原创 2020-08-24 14:58:21 · 922 阅读 · 0 评论 -
Android冒险之旅-1-日志工具的使用
掌握日志工具的使用1.日志工具类的5个方法Log.v () 最为繁琐、意义最小的日志信息。(verbose 冗余)Log.d () 调试信息。(debug 调试)Log.i () 开发者想要看到的,分析用户行为数据。(info 信息)Log.w () 警告信息,提示程序在这个地方可能会有潜在风险。(warn 警告)Log.e () 错误信息,一般代表程序出现严重问题了,必须尽快修复。(error 错误)2.使用方式 Log.d("TAG","Message");3.为什么使用L原创 2020-08-24 12:39:36 · 170 阅读 · 0 评论