搬砖于造轮
比如你的老大写了个BaseModule,里面有很多东西,你就没必要造轮子了,但是其实你这个项目中用不到这么多,那就没必要在打包的时候也把多余的代码打进去,但是你又不能删掉,因为很多个模块都依赖这个Base模块,所以你只能用“排除”的方法来去掉多余的代码。
为什么要写这篇文章,其实对于webview,说简单也简单,说困难也困难。简单在于如果你只是为了简单展示网页或者本地html的话就简单,困难在于你要实现的功能多了,那就会到处都是坑。所以写webview功能的时候你要格外细心,测试的时候要认真测试。
前段时间碰了下插件化,然后就简单的了解下classloader。虽然框架是能用,但是还是打算使用classloader来实现动态加载。 功能:主要开发个插件apk,里面有打印信息,然后宿主导入apk再用classloader加载出相应的类,并且调用里面的方法。
前言: 我上一篇写了VirtualAPK的一个初试,写了一个简单的demo,然后如果是开发APP的情况(不考虑大部分的坑),我觉得上一篇的那种插件化模式是可以使用的。
一.低版本跳转方式 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri,"application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent, 666); uri是apk的uri。
DialogFragment默认情况下就算给内部布局设置match_parent也不是全屏。于是网上就有很多的方案,讲讲我所遇到的坑。 1.给window设置高度 很多地方都是用这样的写法 Window dialogWindow = getDialog().
写这篇文章的原因是因为坐标遇到的坑太多了,所以要记录一下。 一.基本的坐标与获取 先来看看基本的一些内容。 假如一个屏幕的区域是这样,蓝色的那条叫状态栏(statusBar),下面橙色的那条叫导航(NavigationBar),中间绿色的是应用区域。
做网络请求的时候肯定要封装回调,我这里就传了泛型,但是出了个问题是Gson没办法直接解析泛型,如果直接解析的话,不会得到一个javabean而是得到一个LinkedTreeMap。
之前有用过retrofit来做下载的功能,虽然retrofit基于okhttp,但是这还是有点不同。 我是在做更新功能的时候用到这个,具体的操作可能不会说太多,因为网上能找到很多基本的操作,我就说下一些流程和BUG,不管是okhttp还是retrofit都适用。
最近在开发单页面应用,多个fragment嵌套在一个activity里面,和之前单个Fragment依赖在activivty中管理还是有点不同,我这Fragment嵌套了3层,最终还是出问题了。
之前写过了一篇Gradle(一),那是根据别人写的文章总结写的,当时其实还是很多不懂,包括我现在对gradle的理解也其实还是似懂非懂,但是还是要写,每次写完之后包括再重新多看几次,都会有新的感悟。
一次吃饭,突然听到有一个前端朋友有个需求是做一个抽奖的转盘,然后我就思考了下用Android原生的话要怎么实现这个转盘,于是我就自己花时间做个Demo试试。
之前我有讲过一篇打包https://www.jianshu.com/p/cef6dbfb68dc,但是讲真这也只是大概的了解一个打包的过程和怎样使用美团的框架进行很多个渠道的快速打包。
本来想看看源码提高下自己的水平,以前也有看过某些框架的源码,但是基本都是只看某段,这次打算好好的研究一遍。本来是想拿RecyclerView的源码来开刀的,但是好像RecyclerView的代码没那么容易看懂,而且变量还贼多,还大量用了设计模式,讲真,看起来还真觉得挺费劲的。
最近想好好总结一下网络请求的一些相关的内容,随便深入去探讨一下内部是如何实现的。 一.RESTful 这个名词可能经常被提到过,这里也顺便简单过一遍。 简单看看它常用的行为 简单看看请求的状态码 就简单理解下就好,可以把它当成一个规范。
以前也用过webview,不过基本都是展示一些静态的页面,就直接对着API怼就行,现在由于某一块功能太过于繁杂,用本地的方法去开发的话就会太过于麻烦,不是做不到而是没必要,所以也就是时候好好尝试下混合开发。
前言: 最近发现自己好像做了android这么久,竟然还不知道一个应用是如何去启动的,所以决定去一探究竟,结果发现这个过程好像有点难,好像有点繁杂,毕竟我以前从未接触过framework层的内容。
萌新求罩,关于单个组件的生命周期的调用情况在网上已有很多文章写有,那我主要探索多个组件情况下的生命周期的调用情况。 1.一个组件内部包含一个路由组件的情况 父 子 {{message}} 点击变化数据 为了方便查看,我就只打印方法调用的顺序而不打印数据变化前后。
这篇讲两个内容,因为感觉内容都太少了,所以就合起来写一篇算了。 一.Fragment懒加载(四)对Fragment的封装 我之前写过一篇文章说过要实现Fragment的懒加载,要定义3个参数,如果进行懒更新的话还要加一个参数,所以想想如果你的每个fragment都要定义4个参数,至少我觉得这样的代码扩展性不是很好,所以我就写了个LazyFragment对懒加载的操作进行封装。
一.使用Lint 工具栏 -> Analyze -> Inspect Code 弹出窗的Custom scope可以选择对哪一指定部分进行扫描,whole project是整个项目,不太建议每次都扫描整个项目,因为太耗时了。
在开发中突然需要传Emoji,然而直接传的话会报错,而之前开发时又没接触够Emoji,所以打算好好研究一下。 1.Emoji的形式 我想先打印出来看看Emoji是怎么样的,我就设断,看看输入Emoji之后的字符串是怎样的,结果发生了十分有意思的事情。
我之前写过一个自定义的选框列表https://www.jianshu.com/p/e4cebd5d79bc 当时我说功能就我能想到哪些就先把哪些可能需要的功能怼进去,然后在实战中,我发现它不能满足我所有的需求,所以这个框架要改。
在Fragment中跳转到另一个Activity,返回时是调用Activity的onActivityResult呢?还是调用Fragment的onActivityResult呢? 我当然知道,只不过我再碰到时忘记了,然后每次忘记都要从新去网上找,不如做个Test然后记录下来。
我之前做过一个封装,也发过一篇文章,https://www.jianshu.com/p/7e81f4f02a2c 但是在我之后的开发时我又不断的去为这个封装组件添加新东西, 关键是添加多了就变得臃肿,再加上我当时犯了一个很大的错误,我对这个组件进行扩展时我没有写注释也没有写文档,导致我现在每次看这个组件内部的代码都要研究一段时间,所以我决定防止之前的那个组件加上对面向对象进一步的了解进行重新的封装。
由于项目很多地方需要搜索框,就自定义了一个SearchView控件,顺便复习下自定义View的操作。 一.复用性 虽然我自己在多个地方进行复制粘贴也很省时,但是总觉得这样的做法太Low了,所以还是抽出来自定义一个view,看看效果。
前段时间没Android端的需求,所以在学前端,所以也差不多有一个多月没更新文章了,前端我是新手也基本没法写什么文章,只能总结一些比较基础的内容,然后现在暂时Android这边又开始了新的版本开发,所以近期应该会写些新文章。
Android中动画分为三类: (1)帧动画 Frame (2)补间动画 Tween (3)属性动画 Property 一.补间动画 先讲补间动画是因为它的4个属性比较常用。
什么是Gradle,我打开idea,在设置里面会有一个选项是build tools,这个选项里有3个选项,ant,maven和gradle。 所以gradle就是build tools,简称构建工具。
为什么要写这个,因为前段时间看了一下AOP相关的一些内容,然后也是太久没写注解,看得有点那啥不顺畅,所以想对注解做个总结。 一.JAVA自带的注解 (1)Override 覆盖 (2)Deprecated 标记过期方法 (3)SuppressWarnings 屏蔽警告 二.
最近出了一点事,比较烦,所以很长一段时间没怎么去写文章。为了防止生疏,还是觉得随便写写点什么,我觉得打包还是挺有意思的,所以打算试试看,因为以前的项目打包是不归我管,既然没做过,那就试试吧。
需求:有一个列表,列表中有一个edittext(只能输整形),外部有一个整形变量Int,每次改变列表中其中一项的edittext的值时,外部的Int都会改变。
之前有个萌新在技术群里问图片压缩,然后我竟然还要查资料才回答他,没办法,谁让我也是个萌新,所以打算写一篇文章来复习一下图片相关的知识点。 一.URI 和 图片路径 一般来说从本地中拿到Bitmap就能展示图片到imageview,而且URI和图片在本地的路径都能拿到Bitmap,但是这两个不是同一个东西。
自定义viewgroup,这个东西可以说简单也简单,说复杂也复杂。主要是因为用到所以复习了一下,那就顺便做个笔记。 暂时只讲简单的用法 一.重要方法 (1)onMeasure 设置viewgroup的大小 (2)onLayout 设置如何摆放子View (3)generateLayoutParams 设置LayoutParams 最重要的是前面两个方法,所以说viewgroup很简单,你只需要知道在onMeasure 和 onLayout中写什么内容就行。
像商品详情这样的页面,功能多,页面繁杂,特别是对页面逻辑也不少,所以我觉得有必要记录一下开发商品详情页面踩过的坑。 一.别人家的view 如果是仿淘宝或京东的详情页那还好说 image.png 它的导航栏是在上边,这样的结构很好,基本不会有什么大问题,可以自定义一个布局去当标题栏。
之前碰到个问题,使用webview的时候无法定位,最近19大没法墙,只能去百度逛逛,发现有人说要这么做 WebSettings settings = wbContent.
一.滑动带 什么是Android滑动带,我们举个栗子 image.png 就是图中的黑色长条,最典型的就是用在和viewpager或者多个fragment相关的地方,因此也有人称这个东西为Indicator(指示器)。
一.需求 有时候我们需要在项目里做一个菜单样式的功能,比如美团的 image.png 再比如JD的 image.png 有时候很多个app需要这样的UI,或者一个app里面有多个地方需要,那如果重复写的话就会很麻烦,我们可以自定义一个View,然后在多处复用。
以前没太注意,很久没用之后再使用发现有些地方模糊了,就是那种不知道是对是错的感觉,然后又要重复上网去找资料,所以打算自己整理一篇,有很多时候,一些特殊的需要要是能巧妙的运用事件分发机制其实能很快的去解决问题。
最近怎么老写View,可能写view比较方便,写其它东西还要抽时间整理总结,写View就直接封完写出来就行。 准备国庆放假,无心工作,那就写篇简单实用一点的文章,总不能白白浪费了时间。
平时开发的时候我们总会碰到这样的需求。 image.png 有时是多选,有时是单选,这样的页面基本都是用RecyclerView来做的,而如果每次做操作的时候都要去写这个单选框/多选框的逻辑,那就太麻烦了,所以我就想把这样的单选/多选列表功能给封装起来。
android在嵌套滑动的时候会产生滑动冲突。之前我也碰到,但是以前的笔记本丢失了,所以只能重新再写一章。 一.会产生滑动冲突的情况 那么什么时候会产生滑动冲突呢?比如你有个activity,activity的上半部分是一个布局,下半部分是一个可滑动控件(RecyclerView、ListView等),或者下半部分是个viewpager,里面的fragment布局是一个可滑动控件,这样的页面就会产生滑动冲突。
上一篇讲了些我对动态页面的看法和理解,这篇主要讲讲我做的小demo巩固一下,顺便感受下动态页面的魅力。我会在最后发项目的地址。 一.效果展示 15051384411381505138249369.gif 二.使用方法: 1.在布局中定义 目前第一个版本只定义了两个参数,之后的版本会继续扩展功能。
这是一个很微妙的东西,可能平时经常用到,但是没注意,我想对这个内容进行一个总结并提出一些看法,谈的是动态页面,不是动态布局。 一.什么是动态页面 什么是动态页面?我认为是一种在开发时的设计思想,最终展示的页面会随着数据的改变而改变,或者说会根据数据而展示页面。
之前写图片上传的时候说过,要做个图片展示器来向用户展示图片。我这里是使用recyclerView来实现图片展示器的效果。 一.效果展示 展示图片我暂时只设置了三种模式。
想了想,觉得还是把自定义的东西放到最后再讲,所以讲下用Retrofit上传文件,就拿上传图片来说,因为上传图片我是想写一个专题的,包括以下: 1.上传图片操作 2.展示图片操作 3.选择图片操作 上传图片这篇讲,用Retrofit,之后我还想写一篇是用httpurlconnection的,因为用它会有个拼接的操作,只有经历过拼接才会更深刻的了解使用Http上传文件的过程。
我也不打算讲POST,GET这些表单提交啊的做法。这把讲几个比较重要的东西。 一.Retrofit 使用Retrofit第一个套路就是创建它的实例,不管用什么都要创建实例吧。
本来是打算写上传文件和下载文件的,但是涉及到的知识面很广,协议,IO还有请求方法这些,我觉得又不能草率的写,因为每次我看到别人草率写的文章或者完全抄袭的,我就很恼火,这就是我不用百度而用google的理由。
editText默认的属性里面是没有金额类型的,所以要实现这个功能我们就必须自己动手丰衣足食。 一.EditText只允许输入数字、小数点。 首先要知道金额有两部分构成,整数部分和小数部分,要实现只输入数字和小数点很简单。
老实说,我没想到我会写关于Fragment懒加载的第三章内容,我之前是打算写两章就完结了,以我的知识储备,我就只认为懒加载只是为了配合viewpager防止预加载而已,然后我错了,我没想到Fragment的setUserVisibleHint功能这么强大,F哥,对不起我错了,没想到你这么屌。