- 博客(19)
- 收藏
- 关注
原创 【踩坑记录】Android自定义控件——流程进度条
需求实习期间被分配到的第一个任务,完成大概如图这样一个界面。乍一看,整个界面的布局还是十分清晰的,即使是新手也能轻易完成。唯一的难题应该就是这个红色的进度条了,我一开始考虑使用TextView的drawableLeft来实现,但实际使用又感觉不如自定义控件来得灵活,遂决定使用自定义控件的方式实现。然而,我高估了自己的水平????,过程中遇到了不少坑,花了几天才误打误撞地完成这个“简易”进度条,也正因如此,才有了这篇文章来记录一下思考过程、遇到的问题以及解决方案。分析...
2020-12-15 15:35:57 2022 8
原创 RecyclerView框架——BRVAH3.x使用指南
前言最近开始了实习,熟悉项目时,发现一些RecyclerView的Adapter类都继承了一个名为BaseQuickAdapter的类,百度得知这是由BRVAH(官方网站)提供的万用适配器,相比原始的适配器,能减少70%的代码。遂学习之,学习后发现针不戳,只要熟悉RecyclerView的基础使用即可快速上手,并且框架高度封装,能极大提高开发效率。另外,不熟悉RecyclerView使用的同学可以看看我之前的文章:Android——RecyclerView使用汇总框架引入首先在build.gradle
2020-11-30 15:40:44 5015 6
原创 ViewPager2滑动冲突解决方案
简介滑动冲突,简单来说就是两个可滑动的组件嵌套在一起,其中一个组件拦截了滑动事件,导致另一个组件无法滑动或难以滑动的情况。常见的情况有ViewPager2嵌套ViewPager2,ViewPager2嵌套RecyclerView。官方解决方案谷歌官方提供了一种解决同方向滑动冲突的方案 ——NestedScrollableHost.kt将这个布局放在ViewPager2和RecyclerView之间即可解决滑动冲突,类似这样:<?xml version="1.0" encoding="utf
2022-03-17 14:32:10 6796 2
原创 自定义字节转换工具类
简介实现需求时遇到了需要进行字节转换的情况,针对面临的一些问题以及思考拓展实现了一个工具类。基本功能如下:自定义转换的单位区间。比如转换结果的最小单位为KB,最大单位为GB。自定义进制数。一般来说以1024为进制数,但有时也可能会用到1000。转换结果再处理。支持对转换结果进行保留小数、向上取整、向下取整、四舍五入等操作。转换结果带单位。支持为结果添加单位,例如10KB。特殊处理“零”。当转换结果为0时,往往需要展示特殊的文案,如"无可清理内容",可通过自定义接口的方式返回特殊的字符串,默认
2022-03-14 19:58:52 777
原创 【填坑记录】Android自定义控件——流程进度条
前言实习期间编写过一个简易的流程进度条控件,虽说能基本满足需求,也让我仔细学习和体验了一遍自定义组件的基本流程,对我的提升很大,不过我终究还是不能满足于此。相关链接:【踩坑记录】Android自定义控件——流程进度条究其缘由,此控件使用不够灵活,功能也不够完备等等,总之有很多不满意的地方。于是乎,我想要改善和增加更多功能,同时也进一步提升对自定义控件的理解。功能拓展水平展示、均匀绘制最初版只能垂直展示并且圆点的绘制位置需要手动设置,不灵活且不方便。orientation 设置进度条水平/垂直
2021-03-04 19:48:15 719 1
原创 Jetpack学习笔记:架构组件——Room基础使用
简介Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。即方便开发者流畅地访问SQLite数据库。注入依赖dependencies { def room_version = "2.2.6" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compil
2021-02-25 20:47:02 257
原创 Jetpack学习笔记:架构组件——Navigation之使用Safe Args传递数据
Safe Args简介简介内容摘自 在目的地之间传递数据 | Android 开发者 | Android DevelopersNavigation 组件具有一个名为 Safe Args 的 Gradle 插件,该插件可以生成简单的 object 和 builder 类,以便以类型安全的方式浏览和访问任何关联的参数。我们强烈建议您将 Safe Args 用于导航和数据传递,因为它可以确保类型安全。在某些情况下您无法使用 Safe Args 插件,例如当您不使用 Gradle 时。在这些情况下,您可以
2021-02-07 00:07:54 1483 1
原创 Jetpack学习笔记:架构组件——Navigation
Navigation简介简介内容摘自:导航 | Android 开发者 | Android Developers导航是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。导航组件由以下三个关键部分组成:导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目
2021-02-06 15:22:05 335
原创 Jetpack学习笔记:架构组件——ViewModel + LiveData + DataBinding
前言学习Android这么久,对Jetpack早已有所耳闻,一直以为是十分高深的技术,最近开始了解和学习Jetpack才发现原来就是一套优秀的组件库,而且使用起来非常简单方便。现记下此篇,一方面记录组件的使用方法,一方面记录学习过程中的想法。ViewModel...
2021-01-26 00:41:50 472 1
原创 【Android】Fragment实现顶部、底部导航栏
前言无论是顶部还是底部导航栏,都是大多数APP的标配,网络上的相关实现教程也非常之多。最近回忆起以前写的小项目,发现对这块内容有些遗忘,不妨就再整理一遍代码逻辑,记录下来,方便日后查阅(指复制粘贴)。▶ 实现的方式有很多,本文采用以下方式实现:底部导航栏:Fragment + BottomNavigationView顶部导航栏:Fragment + ViewPager2 + TabLayout底部导航栏<布局文件><?xml version="1.0" encoding=
2020-12-23 16:34:00 6878 29
原创 【Android】使用反射机制优化导航页面
正文在Android中,页面跳转的实现很简单,无非就是下面的两行代码。 Intent intent = new Intent(MainActivity.this, TargetActivity.class); startActivity(intent);所谓导航页面,也就是多个承载页面跳转功能的控件的集合罢了,就像这样:点击其中的任意一项,都能跳转到一个新的页面。要实现这样的功能,很简单吧!使用列表让数据按需显示,然后为Item设置点击事件不就行了吗? navAdapter.setOnIt
2020-12-21 16:36:28 362
原创 自定义控件之onMeasure方法的研究整理
前言为了满足设计需求,在自定义View时往往不可避免得要对onMeasure方法进行覆写,其中比较常规的写法就是使用MeasureSpec类的getSize和getMode方法获取到尺寸和模式,再进行相应的处理,最后通过setMeasuredDimension方法完成测量。最近,在编写自定义View时遇到了一些问题和现象,困扰的同时又激发了我,我发现一直以来循规蹈矩,却从未思考过一个问题:onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法中的两
2020-12-04 15:48:10 551
原创 Android——RecyclerView使用汇总
前言众所周知,RecyclerView是一个功能强大的,用于替代ListView的控件。话虽如此,我在项目中的大多数情况下仍只是将其当做一个加强版的ListView使用,很少有深入使用其高级的功能,不过随着需求的增加,深入学习RecyclerView的高级功能也是必不可少的,因此,谨以此文记录我所见所闻的RecyclerView,方便日后复习查阅。基础基础使用RecyclerView可以说是开发中的常客,相信大部分开发者都能轻松地完成基本使用下的代码,甚至由于经常使用而形成了肌肉记忆,实际上Recy
2020-11-27 10:23:30 890 2
原创 Android——View知识体系之位置与坐标参数
结论属性top、left、bottom、right分别对应View四条边到父容器的距离,代表的是View的原始位置,属性x、y、translationX、translationY对应的是View执行属性动画后的位置与偏移量。对应关系是x = left + translationX,y = top + translationY。直观来看就是这样:注意:View2由View1经过属性动画转换得到,并不是两个独立的View。实践出真知设计一个简单的布局,添加相应的属性让结果显示得更为直观。&l
2020-08-18 16:42:27 252
原创 学习总结:ListView工作原理
参考文章Android ListView工作原理完全解析,带你从源码的角度彻底理解http://blog.csdn.net/guolin_blog/article/details/44996879/* 观前提示 */本文以郭霖大神的文章为参考,总结LIstView的工作原理,供自己加深理解和记忆,无法保证内容的正确性和完整性,如果你在学习过程中有幸看到此文,建议出门左转其他大神的博客。思考问题:为什么ListView加载成百上千条数据都不会发生OOM?为什么滑动浏览更多数据时,程序占用内.
2020-06-06 17:47:40 326
原创 Android开发中遇到的一些小坑
EditText禁用换行singleLine属性已被弃用,但不知是什么原因,设置以下两种属性仍无法实现禁用换行的效果android:maxLines="1"android:lines="1"使用 inputType 属性设置为text即可,其他属性值似乎也可行,需要可自行尝试android:inputType="text"取消EditText默认获取焦点为EditText的父组件添加属性即可android:focusable="true"android:focusableInTouc
2020-05-30 11:22:04 225
原创 学习笔记:使用ViewPager2实现简易轮播图
0.实现效果:1.添加依赖dependencies { ... implementation 'androidx.viewpager2:viewpager2:1.0.0'}2.设计布局使用CardView实现圆角的效果,并在父布局的右下角放一个相对布局,用来动态添加指示点。<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.c
2020-05-17 20:11:36 6987 3
原创 学习笔记:RecyclerView设置间距和添加分割线
使用RecyclerView布局,经常需要调整间距和添加分割线以达到更美观的效果,虽然一直接触和使用,但却从来没有认真研究过,经常忘记如何使用,现在就来好好研究一番先放上一个没有分割线的效果图添加默认的分割线使用RecyclerView.addItemDecoration(ItemDecoration decor)方法,添加默认的分割线最简单的方式就是,添加一个简单的DividerIte...
2020-05-06 12:51:41 3093
原创 安卓开发日记——MyDiary(1)
一直有想写博客的想法,无奈自己太懒。现在疫情期间,不开学,上网课,日子过得更加浑浑噩噩,下定决心开发一个记录学习生活的小项目,加以博客的形式记录学习历程,帮助自己提升水准。废话说完,大概看一下项目现有的样子:...
2020-05-01 18:03:54 623
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人