![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
qiantanlong
衣带渐宽终不悔,为伊消得人憔悴。
展开
-
ERROR: Failed to parse XML in D:\MyAPP\XXXX\app\src\main\AndroidManifest.xml
ERROR: Failed to parse XML in D:\MyAPP\XXXX\app\src\main\AndroidManifest.xmlParseError at [row,col]:[21,13]Message: expected start or end tagAffected Modules: app这个报错指向很明确,就是AndroidManifest文件的21行,13列有错误,所以一定要仔细看一看,不要怀疑studio,怀疑studio出问题了,会迷失方向的。原因原创 2021-04-21 16:48:25 · 1418 阅读 · 0 评论 -
Could not create task ‘:app:minifyAlimsReleaseWithR8‘.
这个报错的原因是缺少对应的SDK编译工具版本,查看compileSdkVersion: 29和buildToolsVersion: "29.0.3",然后打开SDK manger查看对应的29 SDK platform进行安装,重新进行编译即可解决问题。原创 2021-02-02 22:20:01 · 5765 阅读 · 0 评论 -
Android X升级处理方案
Android X升级处理方案AndroidX介绍从 API 28(Android 9.0,Pie)开始,Google 推荐开发者从原来的各种支持库转移到一个新版本的名为 AndroidX 的支持库。它相比老支持库(android.support.v7或android.support.v4)有着无需操心版本控制、实时更新的优点。原有的支持库将被保留并且可以继续使用,但接下来所有新的支持都将发布在 AndroidX 上。迁移准备AndroidX的迁移要求在在AndroidStudio 3.2 或更原创 2021-01-25 18:01:59 · 777 阅读 · 0 评论 -
安卓textview为指定文本变色
为了强调特定的文本内容,需要对关键字变色、加粗等操作,使用Html可以实现这个效果。 代码比较简单:private String str = "天啊,我今天真的很高兴,今天天气很好,干好事天天";private void logIndex(String key) { String textStrBlue = "<font color=\"#0000ff\"><strong>"; String endBlue = "</stro.原创 2020-11-14 10:51:22 · 344 阅读 · 0 评论 -
安卓线程同步方案
public class ThreadTest { private Object lock = new Object(); public void threadRunFirst() { new Thread(new Runnable() { @Override public void run() { threadRunSecond(); synchronized..原创 2020-11-04 16:12:47 · 142 阅读 · 0 评论 -
RecycleView使用EditText的数据和焦点错乱问题解决方案
RecycleView是常用的列表控件,在日常的开发中使用频率很高,使用起来很方便,只要设置好条目布局和数据就可以完美的展示数据。EditText是常用的输入控件,用于用户的数据输入。二者本来各自使用都很容易,但是如果放到一起就出现问题,条目的复用导致EditText输入的内容出现错乱,焦点的获取也混乱了,令很多新手大为头疼。基本的思路是要在条目的可见和隐藏时处理好焦点的问题,要将操作的EditText的位置坐标记录下来,进行有效管理,还有将输入框的显示和隐藏也管理起来。解决的代码本身并不复杂,注释也标原创 2020-09-21 14:20:32 · 1817 阅读 · 0 评论 -
Glide加载OkHttp框架https协议的图片
Glide是支持加载https协议图片的,需要自定义GlideModule的实现类,将OkHttp框架实现了https协议的OkHttpClient配置进去。我测试的Glide版本是3.7.0,Okhttp3的版本是3.4.1,核心的类只有三个供大家参考。public class GlideModuleForOkHttps implements GlideModule { @Override public void applyOptions(Context context, Glide原创 2020-09-11 15:42:39 · 735 阅读 · 0 评论 -
获取手机已安装的APP的信息,包括APK文件数据
这个功能在华为手机上测试了,其他机型不确定是不是可以啊。核心的工具类贴处理,列表展示相关的自行编写。public class ApkInfoManager { private static ApkInfoManager appInfoManager; private ApkInfoManager() { } public static ApkInfoManager getInstance() { if (appInfoManager ==...原创 2020-09-11 11:21:58 · 882 阅读 · 0 评论 -
RecyclerView实现拖动调整Item位置,侧滑删除Item功能
实现长按条目调整位置和侧滑删除功能,核心是ItemTouchHelper类,直接贴代码了。DefaultItemTouchHelperpublic class DefaultItemTouchHelper extends ItemTouchHelper { private DefaultItemTouchHelperCallback mDefaultItemTouchHelperCallback; private OnItemMoveListenter itemMoveListe原创 2020-07-18 16:40:06 · 445 阅读 · 0 评论 -
TextView下划线效果
TextView下划线效果支持行间距的设置,padding属性的设置,功能简单,代码也简单。代码@SuppressLint("AppCompatCustomView")public class LinedTextView extends TextView { public LinedTextView(Context context) { super(context...原创 2020-01-10 15:33:41 · 338 阅读 · 0 评论 -
自定义ListView,既可以与Scrollview嵌套使用正常显示,也可以独立使用正常滑动
ListView与Scrollview嵌套使用时,只能显示一个item的高度,需要重写onMeasure方法,这样就可以显示完整了,但是ListView的高度就是所有子item的高度的和并且无法滑动,正好使用scrollview的滑动功能,二指完美结合。 @Override public void onMeasure(int widthMeasureSpec, int heightM...原创 2020-01-02 16:01:23 · 326 阅读 · 3 评论 -
Android selector属性实例详解
Android selector属性实例详解简介在Android项目中,我们都会大量使用selector状态选择器,使控件配合用户的操作展示不同的状态,提升用户的体验效果。一般体现在字体,背景的切换方面,我们可以动态的使用代码去设置,也可以使用selector状态选择器去快速实现,推荐使用selector状态选择器,因为它简单方便,复用性强。项目地址:DrawableDemo创建方式:...原创 2020-01-02 11:41:01 · 852 阅读 · 0 评论 -
Android:Shape属性实例详解
简介:1、支持的类型形状:rectangle: 矩形,默认的形状,可以画出直角矩形、圆角矩形、弧形等oval: 椭圆形,用得比较多的是画正圆line: 线形,可以画实线和虚线ring: 环形,可以画环形进度条2、支持的属性以rectangle为例,这种类型应该是我们使用的最多的类型了,一些控件的背景、布局的背景都可以使用它来完成。我们来看详细的介绍:solid: 设置形状填充的颜色...原创 2020-01-01 09:09:30 · 467 阅读 · 0 评论 -
Sqlcipher加密框架版本升级3.x to 4.x
Sqlcipher数据库加密框架是一个比较流行的Sqlite数据库加密框架,微信的WCDB数据库也是使用的此框架。由于历史原因,项目使用的Sqlcipher框架是3.0.x的版本,具体哪个版本都无从查找,因为是使用的源码。最近由于业务需要,项目要加入androidx的支持,发现Sqlcipher的3.0版本只能支持23以下目标版本的编译支持,于是升级Sqlcipher版本至4.0以上。于是……问题...原创 2019-11-08 11:44:58 · 3298 阅读 · 0 评论 -
判断APP、Activity、Service是否前台运行工具类
/** * 判断当前APP是否在前台 * @return */ public static boolean isRuningProcess(){ ActivityManager activityManager = (ActivityManager) BaseApplication.getApplication().getSystemServi...原创 2019-09-17 11:50:39 · 226 阅读 · 0 评论 -
ERROR: The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin.
原因:是这里出问题了 instrumentTest.setRoot(‘tests’) ,你可能在升级 Android Studio 时更新了项目的 gradle 配置,这里的配置中 instrumentTest 已被弃用,不适用于现在的 gradle 版本。解决办法:用 androidTest 替换 instrumentTest,编译运行即可。...原创 2019-08-26 10:32:11 · 463 阅读 · 0 评论 -
error:Duplicate key BuildableArtifactImpl (file collection)
productFlavors { //在这里添加你所有需要打包的渠道 main{ buildConfigField "boolean", "PRODUCT_DEMO", "false" } demo{ buildConfigField "boolean", "PRODUCT_DEMO", "true" }}多渠道编译时,如果...原创 2019-08-20 15:39:30 · 1491 阅读 · 0 评论 -
宽高自适应的ImageView控件
package com.hisign.wencai.widget;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android....原创 2019-08-06 16:20:46 · 249 阅读 · 0 评论 -
Arouter异常汇总
常见异常: 1、编译异常:Error: Program type already present: com.alibaba.android.arouter.routes.ARouter$$Group$$arouter,查看所有moudle中的路径配置, 解决:是否包含arouter,Arouter中的AutowiredServiceImpl类已经使用了/arouter/servic...原创 2019-08-01 10:57:53 · 2879 阅读 · 0 评论 -
点击APP图标重新启动程序,无法返回之前操作页面的解决方法
测试的例子中有三个activity,启动顺序为SplashActivity-LoginActivity-MainActivity。点击APP图标重新启动程序,无法返回之前操作页面,这个现象在Realese版本出现,debug版本不出现。https://github.com/qiantanlong/APPLaucherDemo这个demo中验证了重新启动APP后的task任务栈的情况,有兴趣...原创 2019-06-14 14:23:52 · 1254 阅读 · 0 评论 -
源码分析安卓事件分发机制的流程
1、Activity---dispatchTouchEvent(MotionEvent ev)----这是APP的点击事件入口,用户的点击操作都是从activity的dispatchTouchEvent方法开始的。某个activityMainActivity@Override public boolean dispatchTouchEvent(MotionEvent ev) {...原创 2018-08-24 14:08:54 · 173 阅读 · 0 评论 -
读懂Android Activity 、 Window 、 View之间的关系
安卓的事件分发机制是个老生常谈的话题,也是面试经常被问到的问题,更是要玩转自定义view必须过的一关,其重要性可见一斑啊。但是要搞懂这个知识点,首先要搞懂我们的view如何接收到事件,我们要搞清的是activity展示view的基本流程,这样可以帮助我们更好的理解安卓事件分发机制。Activity 、 Window 、 View的关系图通过这个图,先对三者之间的关系有一个概念,然后分析源码...原创 2018-08-24 14:15:34 · 297 阅读 · 0 评论 -
源码分析onTouch和onTouchEvent以及onClick的执行顺序,有什么区别
onTouchListener的onTouch方法优先级比onTouchEvent高,会先触发。 如果onTouch方法返回false会接着触发onTouchEvent,如果返回true则onTouchEvent方法不会被调用。 view内置诸如click事件的实现等等都基于onTouchEvent的performClick方法,假如onTouch返回true,这些事件将不...原创 2018-08-24 14:19:29 · 2584 阅读 · 0 评论 -
自定义ViewGroup实现子View的padding、margin属性
当我们实现自定义的VewGroup控件时,会发现其内部的子View的margin、padding属性失效了,这是因为作为包含子View的控件,如果是直接继承自ViewGroup的话,需要自己处理子View的margin、padding的属性。如果是不包含子View的控件的话,则只要处理padding属性就可以了。这里呢,直接贴出代码,因为实现的逻辑相对简单,也在关键位置做了注释。如果对自定义控件不...原创 2018-09-03 14:13:58 · 2330 阅读 · 1 评论 -
实现自定义View(不包含子View)的padding属性
此篇是自定义ViewGroup实现子View的padding、margin属性(https://blog.csdn.net/qiantanlong/article/details/82347850)的姊妹篇,在于实现自定义View(不包含子View)的padding属性,话不多说,直接看代码。package hongzhen.com.defineviewdemo;import andro...原创 2018-09-03 14:18:50 · 717 阅读 · 0 评论 -
API Demos谷歌示例代码工程
API Demos 是 Google 为了 Android 开发者所提供的一个 Android API 合集,其中包含了很多的 API 范例,同时遵循了良好的代码规范,是一个值得开发者研究和学习的典型。为了方便大家进行学习,特将这个工程下载并导入到Android Studio中,测试工程完整并可以运行,节省大家的时间。本文中的Android Studio版本是3.1.4,运行这个项目需要jdk1....转载 2018-09-25 11:15:40 · 1457 阅读 · 9 评论 -
自定义TextView-自定义View、自定义属性基础案例
自定义view是安卓开发的基础,本身没有太多的难点,需要考虑的知识点也不多,主要有canvas绘制相关知识、view控件的测量、自定义属性等,本案例通过一个展示文本的自定义控件,努力演示上述知识点,为自定义view打好基础。读懂这个案例需要你对自定义view有一定的基础,如果你对自定义view一无所知,建议自行查阅相关知识后再看这个案例,因为案例中没有详细的步骤介绍,只对核心的知识点...原创 2018-09-27 14:53:45 · 744 阅读 · 0 评论 -
Android Studio导入arr包,报错找不到***.arr的问题分析与解决
导入arr包时遇到一个问题,无法找到对应的arr文件,但是那个文件明明就在那,见鬼了。既然arr文件存在,那肯定是路径的问题。肯定有人郁闷的把文件删了,再倒入,试了多次,但是错误仍然坚挺的存在。其实,只是路径的配置问题。 配置arr文件的路径: 完整的gradle文件配置:apply plugin: 'com.android.application'andr...原创 2018-10-28 10:56:21 · 4219 阅读 · 0 评论 -
Matrix矩阵的基础案例与分析
使用Matrix矩阵进行矩形的绘制,进而属性matrix的使用方式,深入了解matrix的原理。//1、使用默认的Matrix,绘制默认状态的矩形,宽高都是50像素 Rect rect = new Rect(0, 0, 50, 50); //将Matrix矩阵设置给canvas,并绘制矩形 canvas.setMatrix(mScaleMa...原创 2018-11-07 15:41:15 · 2650 阅读 · 0 评论 -
安卓手势识别--打造超级ImageView控件
自己封装的安卓手势识别器工具类,这个demo是使用这个手势识别器实现的超级图片ImageView控件,支持单指点击、双击、长按、移动;支持双指缩放、旋转、平移等操作。 代码很简单,https://github.com/qiantanlong/YhzGestureDetector ,这是GitHub地址。包含手势识别的工具类。android studio中添加依赖使用的方法:a...原创 2018-11-10 16:56:46 · 313 阅读 · 0 评论 -
安卓Matrix基础知识解析
1、什么是Matrix?官方的释义:The Matrix class holds a 3x3 matrix for transforming coordinates翻译一下:矩阵类包含一个用于变换坐标的3x3矩阵2、如何搞懂Matrix?我们只关心旋转、位移和缩放,只有透视和错切暂时不理会,有兴趣的自行研究。 我们先测试一下,看看Matrix里面到底存的...原创 2018-11-05 13:38:20 · 1203 阅读 · 0 评论 -
创建JitPack上的开源库--支持Gradle依赖
一、常用的Maven库的方案介绍1、什么是JitPackJitPack是一个网站,它允许你把git托管的java或android项目(貌似目前仅支持github),轻松发布到jitpack maven仓库上。2、什么是BintrayBintray是一个网站,它允许你创建私有maven、rpm、deb等仓库。你还可以在Bintray上提交审核,把已经发布到bintray仓库上的库...原创 2018-11-15 14:17:41 · 1184 阅读 · 0 评论 -
APK Analyzer的使用
APK Analyzer是Android studio 2.2 版本后自带的APK分析工具。这是一个专门分析 apk 的神器,省去反编译的繁琐操作。一、如何使用这个工具分析一个APK1、可以在Android Studio中直接双击一个APK文件,就可以打开APK Analyzer窗口2、可以直接将APK文件拖到Android Studio的工作窗口中3、通过build—>...原创 2018-12-20 17:06:12 · 3492 阅读 · 1 评论 -
Windows下Flutter开发环境搭建
一、下载flutter1、方式一:使用git下载git clone -b beta https://github.com/flutter/flutter.git 从Git服务器拉数据的截图。Git默认的HOME和~路径一般都是C:\Users\用户名,如果你修改了Git的默认路径,就自己去找。下图是下载后的flutter文件夹。2、方式二:直接下载zip包,解压就可以使用...原创 2018-12-28 17:39:35 · 579 阅读 · 0 评论 -
引用阿里的路由框架——V4包冲突的解决办法
由于导入阿里的路由框架,出现编译问题,主要是V4包的版本不统一。编译的保存信息: gradle文件:报错信息:WARNING: Conflict with dependency 'com.android.support:support-media-compat' in project ':LibraryDrawfingerFeature'. Resolved vers...原创 2018-12-18 17:17:07 · 553 阅读 · 0 评论 -
使用BitmapFactory的decodeResource方法加载图片的坑--被缩放问题
一、场景介绍:需要原始比例加载一个张图片,并准确控制其缩放的比例大小,测试的设备分辨率为1280*800和1920*1080两种分辨率。加载方式是BitmapFactory.decodeResource(getResources(), R.drawable.finger)生成bitmap,然后交给imageview进行加载。这个坑就是:同样的代码获取的bitmap,得到的高和宽却不同:一个是6...原创 2019-02-19 15:57:20 · 19648 阅读 · 0 评论 -
Exception和Error的基础知识
#概念Throwable类,只有Throwable类的实例才可以抛出或者捕获,它是Java异常处理机制的基类,Exception和Error都继承与它。Exception和Error是Java对于异常处理的两种方式,只是在具体使用场景和功能上有所差别。##ExceptionException是java程序运行中可预料的异常情况,可以获取到这种异常,并且对这种异常进行业务外的处理。分为检查性异...原创 2019-05-26 14:31:56 · 304 阅读 · 0 评论 -
ADB无线连接手机调试配置
通过adb命令进行无线调试,不需要手机root权限,方便、快捷,就这么简单。配置adb到电脑的环境变量:需要修改为你自己的adb命令所在的目录。设置无线连接1、手机和电脑连入同一个无线网络2、手机连接电脑,在命令行输入adb tcpip 55553、断开连接线,命令行输入adb connect 10.3.6.59(手机的IP地址)4、提示连接成功后,可以...原创 2018-08-15 10:12:14 · 31209 阅读 · 0 评论