自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 Android中Activity、Window、PhoneWindow和DecorView之间的关系

前言笔者在学习android过程中经常搞混Activity、Window、PhoneWindow和DecorView之间的关系,因此特地花点时间去理清它们之间的关系,并做此记录,将来忘了可以回头来看看,也希望能帮到需要的读者。(以下截图均为Android对应源码)正文1. 每一个Activity都持有一个Window对象,通过getWindow()方法获得,如下:2. 而Window本身是一个抽象类,它有一个唯一的实现类就是PhoneWindow:3. 也就是说,Activity持有的这一个W

2021-01-10 09:20:42 915 2

原创 android studio 删除无用的import快捷键

自己老是忘,写一下,我不信还能忘记!!!Ctrl+Alt+O

2020-08-07 16:02:36 2310 1

原创 Android事件分发机制

Android事件分发机制1.触摸事件及MotionEvent2.事件分发机制概述3.事件从触摸到View树流程4.View的事件分发机制的实例演示5.问题解答6.总结1.触摸事件及MotionEvent在学习事件的分发机制前,我们要先了解下什么是触摸事件。触摸事件就是捕获触摸屏幕后产生的事件。比如当点击一个button的时候,通常就会产生两个或者三个事件——按钮按下,这是事件一;如果不小心滑动一下,这是事件二;当手抬起,这是事件三。Android为触摸事件封装了一个类——MotionEvent。只要是

2020-06-18 21:06:39 246

原创 Android中asset文件夹和raw文件夹区别

res/raw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制res/raw和assets的不同点:1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹读取文件资源:1.读取res/ra

2020-06-03 15:48:56 222

原创 Windows显示grep不是内部或外部命令,也不是可运行的程序或批处理文件

在android开发中,经常需要用到adb指令,在此记录自己遇到的一个坑,就是想查看android应用开启的进程时,用grep来过滤进程,报错如下:解决办法:根本不是grep的问题,凡是有shell命令后面语句都要加"",之后就可以正常运行了。adb shell “ps|grep com.example”,这样就ok了...

2020-06-03 15:42:04 5536 3

原创 安卓保证TextView一直跑马灯的做法

问题需要跑马灯的TextView和其他的View在同一个ViewGroup下, 有时候需要改动这个ViewGroup下其他View的LayoutParam,这个修改过程可能导致TextView暂时性失去焦点,表现为跑马灯效果会被重置,很难看。解决方法一般是采取隔离政策,把其他需要改动LayoutParam的View和跑马灯的TextView隔离开,用一个FrameLayout隔离一下。 <FrameLayout android:layout_width="0dp"

2020-05-26 12:07:00 338

原创 android修改SeekBar默认样式

最近在写android小项目的时候需要用到SeekBar控件,由于我把activity的背景设置为黑色,所以默认的SeekBar在黑色背景会出现背景进度条被黑色覆盖看不见的情况,如下图所示,后面的背景没了,不美观。后来经查资料,修改SeekBar默认样式,progressDrawable可以改变背景颜色,这里改为白色,但是会发现SeekBar变大了,背景非常不美观,故需要设置maxHeight和minHeight,改变SeekBar的宽度,如下图。改变完效果如下图下面那条SeekBar的样式。显然还

2020-05-19 00:32:37 1388 1

原创 Kotlin语法学习(下)

前言之前写过一篇Kotlin语法学习(上)https://blog.csdn.net/weixin_43615488/article/details/105952090,讲述的是kotlin的基础语法,这篇主要将kotlin的其他一些特性及用法1. 标准函数with、run和apply(1)with函数接收两个参数,第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式的最后一行代码作为返回值返回f

2020-05-11 22:04:13 168

原创 Kotlin语法学习(上)

前言本人主要学习android开发,之前一直用的编程语言是java。Google在2019年的I/O大会上宣布Kotlin已经成为Android开发的第一语言,更加推荐使用Kotlin来编写Android应用程序。说实话,我刚开始是有点抵触情绪的,哎,java写的好好的,又得去学习新的Kotlin语法,太难了。但是没办法,总得拥抱变化吧。那就学咯,在此记录下Kotlin的语法,方便自己查阅,也方...

2020-05-11 11:12:33 156

原创 何时使用抽象类?何时使用接口?

一、抽象类在java中抽象的关键字为abstract,抽象类被创造出来就是为了继承。抽象类有以下几个特性:1、抽象方法必须为public、protected(若为private,则不能给子类继承,子类无法实现该方法,所以无意义),缺省时为public;2、抽象类不能直接用来创建对象,必须由子类继承并实现其父类方法才能创建对象;3、抽象类可以继承抽象类,子类必须复制继承父类的抽象方法;4...

2020-03-31 10:11:27 3086

原创 GC Roots定义

一、什么是垃圾内存中已经不再被使用到的空间就是垃圾二、要进行垃圾回收,如何判断一个对象是否可以被回收?1.引用计数法很难解决对象之间的循环引用问题2.枚举根节点做可达性分析java jvm的官方实现版本是HotSpot,他的GC回收是通过可达性算法实现的,而不是通过引用计数器算法。所谓的可达性就是从若干个GC Roots 出发,能被直接或间接的引用到的,都称为“可达的”(reacha...

2020-03-11 11:43:46 235

原创 单例模式双重检验锁的判断是否为null的意义

关于双重检验锁,首先简单来看一个小例子,代码如下:public class Singleton{ private static Singleton instance = null; private Singleton(){} public static Singleton getInstance(){ if (instance == null) {//e...

2020-03-09 10:45:03 411

原创 android EventBus的简单使用

1 前言当我们进行项目开发的时候,往往是需要应用程序的各组件、组件与后台线程间进行通信,比如在子线程中进行请求数据,当数据请求完毕后通过Handler或者是广播通知UI,而两个Fragment之家可以通过Listener进行通信等等。当我们的项目越来越复杂,使用Intent、Handler、Broadcast进行模块间通信、模块与后台线程进行通信时,代码量大,而且高度耦合。现在就让我们来学习一下...

2020-03-08 22:18:51 195

原创 Handler持有Activity的泄露解决:静态内部类+弱引用

在处理handle异步消息处理机制中,我们经常会写出如下代码:public class HandlerTestActivity extends Activity { private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg...

2020-03-08 12:25:41 1708

原创 Android 5.0到10.0版本的重大变化

Android 5.0Material DesignAndroid 6.0官方指纹支持运行时权限机制->需要动态申请权限Android 7.0多窗口模式支持Java 8语言平台Android 8.0广播接收者不能静态注册发送通知必须用通知渠道才能成功发送Android 9.0刘海屏 API 支持限制明文流量的网络请求 httpAndroid 10暗黑模式隐私增...

2020-03-06 21:59:40 781

原创 Android布局优化之ViewStub、include、merge使用

原文链接:https://blog.csdn.net/bboyfeiyu/article/details/45869393

2020-03-06 16:15:58 138

原创 Service的生命周期、两种启动方法的区别

Service的生命周期、两种启动方法的区别一、A started serviceonCreate, onStartCommand, onBind 和 onDestroy。这几个方法都是回调方法,都是由Android操作系统在合适的时机调用的,并且需要注意的是这几个回调方法都是在主线程中被调用的。1、onCreate: 执行startService方法时,如果Service没有运行的时候会...

2020-03-06 00:57:34 3208

原创 http1.0、1.1、2.0的区别

1. http 1.01.1 链接无法复用,即不支持持久链接:http 1.0 规定浏览器与服务器保持较短时间的链接,浏览器每次请求都和服务器经过三次握手和慢启动(基本思想是当TCP开始传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞)建立一个TCP链接,服务器完成请求处理后立即断开TCP链接,而且不跟踪每个浏览器的历史请求。注意:由于...

2020-03-03 12:05:55 421

原创 JAVA的原子性和可见性的理解

JAVA的原子性和可见性的理解这篇博客主要解决两个问题:1. 原子性和可见性的区别(1)原子性是拒绝多线程操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。例如 a=1是原子性操作,但是a++和a +=1就不是原子性操作。(2)可见性volatile修饰词,可以应对多线程同时访问修改同一...

2020-03-02 20:57:19 1338

原创 安卓区分几种不同的Context的区别

可以参考这篇文章https://medium.com/@ali.muzaffar/which-context-should-i-use-in-android-e3133d00772cContext|— ContextWrapper|— —Application|— —ContextThemeWrapper|— — — —Activity|— —Service|— — — Inten...

2020-03-01 11:49:49 378

原创 RecyclerView一键滑到顶部,并控制滑动速度

1 需要新建一个LayoutManager,然后重写SmoothScrollToPosition,如下图新建FastScrollLinearLayoutManager,继承LinearLayoutManagerpublic class FastScrollLinearLayoutManager extends LinearLayoutManager { private float MI...

2020-02-29 17:56:53 448

原创 在RecyclerView中动态更新ViewHolder中的ImageView须知

如果一个RecyclerView中的每个元素都具有一个ImageView和一些别的东西,而这个RecyclerView中的元素个数需要动态增减的时候,如果只是单纯的调用notifyDataSetChanged()函数,会出现ImageView错位的情况。解决方法是在onBindViewHolder处,Glide加载图片之前来上一句imageView.setImageDrawable(null)...

2020-02-28 22:47:16 1095

原创 View 绘制全生命周期

View生命周期相关方法View的生命周期从构造方法开始依次执行以下几个方法,该View的可见性为默认值时:(0)Constructors()View在代码中被创建时调用第一种构造方法,View从layout中加载出来时会被调用第二种构造方法,其中XML中的属性也会被解析。(1)onFinishInflate()该方法当View及其子View从XML文件中加载完成后触发调用。通常是在Ac...

2020-02-28 22:23:00 319

原创 RecyclerView的LinearLayoutManager一些Count函数

getChildCount和getItemsCount之类的函数的区别继承自ViewGroup的View是可以包含许多子View的,他们也会存在getChildCount和getItemsCount之类的函数,可以返回一些与元素数量有关的数值。不过要特别注意的是这些数值在父视图包含的子视图展开形态不同时会有不同的结果。安卓官网给出的解释是:RecycleView Return the c...

2020-02-28 21:52:37 795

原创 android配置gradle阿里云镜像站

android studio或idea生成的android项目,默认声明jcenter()与google()配置:我们可以在项目下的build.gradle中看到:当然,没有梯子的话,可以用阿里云镜像站,将这两行配置修改为以下三行代码:maven {url'https://maven.aliyun.com/repository/google'} maven {url'https://m...

2020-02-28 17:14:14 902

原创 android配置ButterKnife

ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。项目集成起来...

2020-02-27 22:22:43 102

原创 android实现简单的切换StatusBar和ActionBar的颜色

android实现简单的切换StatusBar和ActionBar的颜色只需要在需要切换的Activity中执行如下代码:ActionBar ab = getSupportActionBar(); if(ab != null) { ab.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color...

2020-02-27 11:10:11 206

原创 android app启动动画的实现

android app启动动画的实现:先出现app logo再出现注册登录界面先看看效果图下面介绍具体实现步骤1 MainActivity代码实现:主要是动画的切换public class MainActivity extends AppCompatActivity { ImageView logoView; View loginFragment; View r...

2020-02-07 18:15:35 4827

原创 android布局文件夹layout下分模块,使布局更易管理

android布局文件夹layout下分模块,使布局更易管理1.在app下的build.gradle中增加如下配置代码def listSubFile={ def layoutFolder='src/main/res/layout' def files=file(layoutFolder).listFiles() def folders=[] ...

2020-01-29 16:12:36 1061 6

原创 android 实现图片预览、滑动轮播和双指缩放

android 实现图片预览、滑动轮播和双指缩放最近大作业项目中用到了android图片预览、滑动轮播和双指缩放功能,单独抽离出来,变成一个可以复用的模块,相关代码已经上传到github:https://github.com/poxiaozheng/ImageDealWith.git.效果图如下:...

2020-01-21 13:53:33 557 2

原创 android fastjson的使用

android fastjson的使用build.gradle中引依赖:implementation 'com.alibaba:fastjson:1.1.71.android'具体用法,各种形式的转换List<Student> list=new ArrayList<>(); Student student=new Student("bob",24)...

2020-01-11 11:02:38 3673

原创 Android DrawerLayout实现NavigationView不记住上次所选选项

Android DrawLayout和NavigationView优化android自带DrawLayout和NavigationView,使得我们可以将一些菜单隐藏起来,而不是放置在主屏幕上,然后可以通过滑动的方式将菜单显示出来,这种方式既节省了屏幕空间,又实现了非常好的动画效果,使用起来也很方便。之前使用的时候,在navigation上选中某个item后,退出drawLayout,默认会记住...

2020-01-10 20:42:07 397

原创 android调色器的实现

android调色器的实现最近在github上发现一个比较好用的调色器,写出来和大家分享下,用法也超级简单。先看效果图吧。 1.首先需要引用一个库,在app文件夹下的build.gradle里添加库“colorpicker”,我的颜色选择结果用一个矩形来展现,这里用到了circleimageview,故一起引用了。implementation 'com.dingmouren.colorpi...

2020-01-10 17:18:11 1766

原创 android EditText处理焦点问题和键盘收起问题

android EditText处理焦点问题和键盘收起问题android经常需要用到搜索框,一个EditText和一个搜索按钮,本文介绍的是处理EditText焦点和键盘收起问题。为了方便起见,所有函数都写在MainActivity中了。主要达到效果:进入界面后EditText默认不获取焦点,点击后才获取。点击搜索按钮后EditText失去焦点,开始搜索,收起软键盘。主要是写了三个功能函数,...

2020-01-10 16:34:02 2333

原创 android自定义Button背景和EditText背景

android自定义Button背景、EditText背景为了界面的美观,我们经常需要自定义系统自带的Button和EditText控件,下面我实现了button去掉边框、点击button字体变色和editText矩形框背景,借以美化登录界面。先上图片:1.在res文件夹下的drawable文件夹里新建edittext_background.xml,实现editText矩形边框<?...

2020-01-09 10:59:49 524

原创 Android TabLayout 实现底部导航栏和顶部导航栏

Android TabLayout 实现底部导航栏和顶部导航栏写在前面底部导航栏的实现方法及代码顶部导航栏的实现总结写在前面做为一名刚入门的Android个人开发者,最近在学习如何实现一个简易的导航栏,下面是我的实现具体步骤(idea集成Android Studio) 先来看看效果吧底部导航栏的实现方法及代码一、 配置 build.gradle (添加如下代码)implementa...

2019-10-14 23:34:10 3117

空空如也

空空如也

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

TA关注的人

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