自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 1169 1

原创 【UI篇】Android 沉浸式状态栏的那些事

1、隐藏状态栏时,刘海屏需要多做两个步骤①:将 window 上移到状态栏位置。②:将decorView 上移到状态栏位置。而隐藏导航栏时则直接隐藏即可。2、沉浸式设置都要配合使用才不会遮挡显示内容3、隐藏状态栏的时候,如果加上了属性,那么在刘海屏手机上也会有一个上边距,如下图,在直屏手机中是正常的。-...

2022-08-11 18:26:24 6135

原创 RecyclerView 1.2.0版本ConcatAdapter

目录什么是ConcatAdapter怎么用ConcatAdapter存在的问题什么是ConcatAdapterConcatAdapter 是 RecyclerView 在 1.2.0版本推出的新功能,其实就是一个可以合并多个适配器的适配器。就是可以将上下两部分不同的列表,组合放到一个recyclerview中。当然也有小机灵鬼可能会说:啊我用NestedScrollView加 两个recyclerview 也可以实现两个列表嵌套滑动啊。确实,实现是能实现,但是NestedScrollView 嵌套 re

2022-05-17 18:31:07 659

原创 阿里mPaas中扫一扫功能的接入

这里写自定义目录标题管理后台创建应用安装mPaas插件项目配置管理后台创建应用要接入扫码功能,首先要在mPaas后台创建对应的应用,并且完成配置后下载配置文件接入到项目中。mPaas工作台地址创建完应用后需要配置项目包名。配置完成后可下载对应的配置文件,如下图:安装mPaas插件使用android studio 开发的话可以直接安装 mPaas插件。如上图,直接到插件市场搜索安装即可。安装完会在标题栏出现对应按钮。项目配置要接入扫一扫功能,首先要将mPaas接入到项目中,接入的方式有

2022-04-19 19:52:41 1733

原创 (源码篇)Retrofit源码解析

Retrofit源码解析Retrofit内部如何实现接口调用callAdapter 以及 responseConverter 的作用Retrofit内部如何实现接口调用我们都知道Retrofit 是通过定义接口,然后拿到接口的实例并且调用对应的方法。我们就从使用流程开始看源码里是如何实现的。1、首先通过 retrofit.create 方法拿到自定义的 service实例,上源码:这里可以看到,通过动态代理的方式生成了自定义service 的对象。并且在调用自定义接口方法时 是执行了 1 处的方法

2021-09-23 01:46:17 975 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 238

原创 按比例适配安卓屏幕的方案(今日头条的适配方案)

目录一、概念理解二、如何适配三、使用第三方框架四、预览设备的选择一、概念理解首先理解一些概念: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 2458

原创 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 3262

原创 安卓性能优化(最全)——内存优化

内存优化一、防止内存泄露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 946

原创 安卓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 1771

原创 编写自定义flutter插件(安卓篇)

最近在搞flutter插件化。感觉插件化开发还是很有必要,其实无论是否真的有用到跟原生的交互,只要你把某写功能模块分成一个个插件,后期无论是拓展还是复用都更加方便。只要引入一个个插件就可以了。看一下怎么来创建flutter插件吧。选择新建flutter plugin项目。这里如果要跟安卓原生交互的话。kotlin不熟悉的就不要勾选这个勾了。因为勾了默认mainActivity就会用kotlin 生成了。项目建好后就比较简单了。如果是要跟原生交互的话,就直接在android 子项目中开发就行了。明

2020-07-24 14:33:02 8371 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 4646

原创 安卓自定义流式布局

废话少说直接上代码,对自定义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 3450

原创 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 263

原创 安卓进程保活

进程保活的方式安卓杀死进程的一些机制保活的一些方式一像素保活法前台服务保活法安卓杀死进程的一些机制安卓中的进程主要分为以下五种:1、前台进程Foreground Process2、可见进程Visible Process3、服务进程Service Process4、后台进程Background Process5、空进程Empty Process安卓的机制是在内存达到一定的阈值时就会杀死对应的等级进程。查看阈值的方法如下图(单位是4KB)。当然,这是在不同的定制系统上会有差异,手机厂商

2020-06-10 10:13:03 3906

原创 HandlerThread的使用

正如前面所说,线程间通信的时候,比如Android中常见的更新UI,涉及到的是子线程和主线程之间的通信,实现方式就是Handler+Looper,但是要自己手动操作Looper,不推荐,所以谷歌封装了HandlerThread类(类似于AsyncTask类)。上代码,具体实现:public class MainActivity extends AppCompatActivity { Handler mainHandler,workHandler; HandlerThread mHan

2020-05-20 22:55:25 507

原创 安卓事件分发流程

分发流程首先从底层开始 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 185

转载 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 174

原创 跨进程使用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 3910 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 258

原创 RecyclerView 一些知识点

RecyclerView 一些知识点一、设置元素边距padding:分割线标签二、设置左右滑动删除以及长按上下移动一、设置元素边距由于RecyclerView 没有像listview一样的divider 属性,所以需要用recyclerView.addItemDecoration() 方法来设置 元素之间的间距。自定义类 继承 ItemDecoration。主要重写三个方法:public void onDraw(Canvas c, RecyclerView parent, State state)

2020-05-19 18:17:18 275

原创 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 293

原创 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 364

原创 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 650

原创 安卓版本号对应的API版本号

2020-05-18 21:24:06 479

原创 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 125

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除