- 博客(26)
- 收藏
- 关注
原创 打工人息息相关的个税计算
先声明一下,本文是根据2022年的个税税率来举例计算的。首先来看一下2022年的个税的税率:1.年度不超过36000元的税率为:3% 速算扣除数:02.超过36000-144000元的部分税率为:10% 速算扣除数:25203.超过144000-300000元的部分税率为:20% 速算扣除数:169204.超过300000-420000元的部分税率为:25% 速算扣除数:319205.超过420000-660000元的部分税率为:30% 速算扣除数:52920。
2022-10-11 15:11:28
1319
1
原创 【UI篇】Android 沉浸式状态栏的那些事
1、隐藏状态栏时,刘海屏需要多做两个步骤①:将 window 上移到状态栏位置。②:将decorView 上移到状态栏位置。而隐藏导航栏时则直接隐藏即可。2、沉浸式设置都要配合使用才不会遮挡显示内容3、隐藏状态栏的时候,如果加上了属性,那么在刘海屏手机上也会有一个上边距,如下图,在直屏手机中是正常的。-...
2022-08-11 18:26:24
6627
原创 RecyclerView 1.2.0版本ConcatAdapter
目录什么是ConcatAdapter怎么用ConcatAdapter存在的问题什么是ConcatAdapterConcatAdapter 是 RecyclerView 在 1.2.0版本推出的新功能,其实就是一个可以合并多个适配器的适配器。就是可以将上下两部分不同的列表,组合放到一个recyclerview中。当然也有小机灵鬼可能会说:啊我用NestedScrollView加 两个recyclerview 也可以实现两个列表嵌套滑动啊。确实,实现是能实现,但是NestedScrollView 嵌套 re
2022-05-17 18:31:07
736
原创 阿里mPaas中扫一扫功能的接入
这里写自定义目录标题管理后台创建应用安装mPaas插件项目配置管理后台创建应用要接入扫码功能,首先要在mPaas后台创建对应的应用,并且完成配置后下载配置文件接入到项目中。mPaas工作台地址创建完应用后需要配置项目包名。配置完成后可下载对应的配置文件,如下图:安装mPaas插件使用android studio 开发的话可以直接安装 mPaas插件。如上图,直接到插件市场搜索安装即可。安装完会在标题栏出现对应按钮。项目配置要接入扫一扫功能,首先要将mPaas接入到项目中,接入的方式有
2022-04-19 19:52:41
1853
原创 (源码篇)Retrofit源码解析
Retrofit源码解析Retrofit内部如何实现接口调用callAdapter 以及 responseConverter 的作用Retrofit内部如何实现接口调用我们都知道Retrofit 是通过定义接口,然后拿到接口的实例并且调用对应的方法。我们就从使用流程开始看源码里是如何实现的。1、首先通过 retrofit.create 方法拿到自定义的 service实例,上源码:这里可以看到,通过动态代理的方式生成了自定义service 的对象。并且在调用自定义接口方法时 是执行了 1 处的方法
2021-09-23 01:46:17
1058
2
原创 (源码篇)安卓中 AppCompatActivity 与 Activity 中 setContentView 的区别
Activity中的 setContentView 流程我们直接来看下源码:public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); initWindowDecorActionBar(); }可以看到这里是直接调用了 getWindow().setContentView(layoutResID); 其中getWindow
2021-09-07 17:44:29
273
原创 按比例适配安卓屏幕的方案(今日头条的适配方案)
目录一、概念理解二、如何适配三、使用第三方框架四、预览设备的选择一、概念理解首先理解一些概念:px:就是像素,比如手机分辨率 1920*1080 指得就是分辨率。dpi:一英寸所占用的像素点。density:个人理解是像素比。安卓规定 dpi 为160 的时候,px跟dp 就是1:1。而density的计算公式就是density = dpi / 160。dp:安卓定义的一个抽象的单位,实际并不存在,为了统一各个设备之间尺寸适配的问题而出现的。计算公式:dp = px / density 。从
2020-09-25 10:14:24
2495
原创 NestedScrollView嵌套RecyclerView内存占用过大?用RecyclerView 添加HeaderView 以及FooterView吧
我们就新建一个中间层的适配器,来用装头部跟尾部:class WrapRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{// private ArrayList<String> datas; private RecyclerView.Adapter mRealAdapter;//真实的列表适配器 private ArrayList<View> mHeaderV
2020-08-27 17:36:31
3292
原创 安卓性能优化(最全)——内存优化
内存优化一、防止内存泄露1、单例模式导致的内存泄露2、静态变量导致的内存泄漏3、非静态内部类导致内存泄漏4、未取消的注册或者回调造成内存泄漏5、Timer 和 和 TimerTask 导致内存泄露6、集合中的对象未清理造成内存泄露7、资源未关闭或释放导致内存泄露8、属性动画造成内存泄露9、WebView 造成内存泄露二、资源的复用1、bitmap的复用2、数据过长时,不要使用NestedScrollView嵌套RecyclerView三、减少内存开销1、使用轻量的数据结构2、尽量不使用枚举类型3、Bitma
2020-08-27 17:00:40
971
原创 安卓MVP框架
地址:GitHub地址封装的还是挺多东西的,我也就不一一说了。可以去仓库看看,直接看源码吧。BaseMvpActivity:public abstract class BaseMvpActivity<T extends IBaseContract.IBasePresenter> extends AppCompatActivity implements IBaseContract.IBaseView, IListener,View.OnClickListener {
2020-08-21 16:47:40
1784
原创 编写自定义flutter插件(安卓篇)
最近在搞flutter插件化。感觉插件化开发还是很有必要,其实无论是否真的有用到跟原生的交互,只要你把某写功能模块分成一个个插件,后期无论是拓展还是复用都更加方便。只要引入一个个插件就可以了。看一下怎么来创建flutter插件吧。选择新建flutter plugin项目。这里如果要跟安卓原生交互的话。kotlin不熟悉的就不要勾选这个勾了。因为勾了默认mainActivity就会用kotlin 生成了。项目建好后就比较简单了。如果是要跟原生交互的话,就直接在android 子项目中开发就行了。明
2020-07-24 14:33:02
8461
8
原创 flutter开发引用安卓原生view
flutter SDK 1.12版本之后,默认的MainActivity 都是继承 io.flutter.embedding.android.FlutterActivity 而 1.12版本之前是继承io.flutter.app.FlutterActivity 这两个版本注册的方式是不同的,下面来仔细看一看。举个例子:在flutter中调用安卓原生的view组件。public class TestView implements PlatformView { private TextView
2020-07-17 18:29:08
4692
原创 安卓自定义流式布局
废话少说直接上代码,对自定义view有一定了解的同学想必都能看懂:package com.example.text.view;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.view.ViewGroup;/** * <p></p > * <p>&
2020-07-02 21:26:55
3464
原创 CoordinatorLayout 的使用
布局代码如下:<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pare
2020-06-29 16:58:37
277
原创 安卓进程保活
进程保活的方式安卓杀死进程的一些机制保活的一些方式一像素保活法前台服务保活法安卓杀死进程的一些机制安卓中的进程主要分为以下五种:1、前台进程Foreground Process2、可见进程Visible Process3、服务进程Service Process4、后台进程Background Process5、空进程Empty Process安卓的机制是在内存达到一定的阈值时就会杀死对应的等级进程。查看阈值的方法如下图(单位是4KB)。当然,这是在不同的定制系统上会有差异,手机厂商
2020-06-10 10:13:03
3934
原创 HandlerThread的使用
正如前面所说,线程间通信的时候,比如Android中常见的更新UI,涉及到的是子线程和主线程之间的通信,实现方式就是Handler+Looper,但是要自己手动操作Looper,不推荐,所以谷歌封装了HandlerThread类(类似于AsyncTask类)。上代码,具体实现:public class MainActivity extends AppCompatActivity { Handler mainHandler,workHandler; HandlerThread mHan
2020-05-20 22:55:25
530
原创 安卓事件分发流程
分发流程首先从底层开始 activity->viewGroup-> view先看activity ,点击时首先调用dispatchTouchEvent方法:public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } if (getWindow().superDispa
2020-05-20 22:51:59
193
转载 Handler机制
Handler 机制Looper.prepare()Handler创建Looper.loop()发送消息Handler机制,主要牵涉到的类有如下四个,它们分工明确,但又相互作用Message:消息Hanlder:消息的发起者Looper:消息的遍历者MessageQueue:消息队列下面我们从Handler的套路,来分析他们的作用而Handler 的创建必须要有 Looper 对象,我们来看看Looper 的流程:Looper.prepare() public static void p
2020-05-20 18:47:19
221
原创 跨进程使用SharedPreference共享数据
首先,两个应用要有相同的sharedUserId:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.text.uid" android:sharedUserId="com.text.jzh"> <application android:allowBackup="true" android:icon="@mipmap/i
2020-05-19 23:13:22
3931
1
原创 ConstraintLayout 的用法
1、app:layout_constraintLeft_toLeftOf//Constrains the left side of a child to the left side of a target child (contains the target child id).表示此控件的左边框与某个控件的左边框对齐或者在其右边2、app:layout_constraintLeft_toRightOf//Constrains the left side of a child to the rig
2020-05-19 18:24:10
272
原创 RecyclerView 一些知识点
RecyclerView 一些知识点一、设置元素边距padding:分割线标签二、设置左右滑动删除以及长按上下移动一、设置元素边距由于RecyclerView 没有像listview一样的divider 属性,所以需要用recyclerView.addItemDecoration() 方法来设置 元素之间的间距。自定义类 继承 ItemDecoration。主要重写三个方法:public void onDraw(Canvas c, RecyclerView parent, State state)
2020-05-19 18:17:18
309
原创 ViewPager嵌套Fragment时实现懒加载
一、为什么要懒加载ViewPager 嵌套 Fragment 使用时, 所有Fragment 会被创建,无论是否对用户可见,都会调用接口加载数据,显然浪费流浪跟内存。二、如何实现懒加载// A code block/** * <p></p> * <p></p> * * @author jinzhenhua * @version 1.0 ,create at:2019/11/27 9:02 */public abstract class
2020-05-19 12:01:59
302
原创 Android Studio 3.0找不到Android Device Monitor
前提:一定要root找到SDK目录文件夹tools下,然后输入命令montior,或者直接双击montior.bat文件。就会出现界面:然后进入skd/D:\SDK\platform-tools中执行命令: adb shell ,解决办法:要想查看data文件首先要获取手机root权限,成功root后,修改data权限即可查看data里面的数据库。data权限修改办法:1.Open cmd2.输入’adb shell’,回车(adc.exe位于SDK下的platform-tools文件夹下,需要
2020-05-18 21:34:07
398
原创 recyclerView 中复用editview 时,添加addTextChangedListener事件每个item都触发了
将edittext.addTextChangedListener写在edittext.setOnFocusChangeListener hasFocus为true下面(即只有获取到焦点时才添加监听器)et_vlaue.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFoc
2020-05-18 21:28:14
693
原创 ScrollView嵌套RecyclerView或listview相关问题
ScrollView嵌套RecyclerView滑动冲突相关问题listview高度设置方法1:自定义listview :重写onMeasure 方法方法2.手动设置Listview的高度,获取每一行的高度,然后手动设置解决listview 放在ScrollView 中时滑动冲突:每次点击listview时让ScrollView 获取焦点listview高度设置方法1:自定义listview :重写onMeasure 方法// An highlighted block @Override
2020-05-18 21:20:06
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人