![](https://img-blog.csdnimg.cn/20201228113916274.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
文章平均质量分 55
Android知识和技术
绿叶青年
Android开发初级工程师
展开
-
java.lang.IllegalStateException:Failed to build unique file: /storage/emulated/0/...
java.lang.IllegalStateException:Failed to build unique file: /storage/emulated/0/...原创 2022-11-07 14:42:54 · 1387 阅读 · 1 评论 -
安卓aab包安装方式
安卓aab包安装方式原创 2022-11-07 09:31:29 · 2731 阅读 · 0 评论 -
SharedPreferences.Editor中commit()和applay()的区别
在使用Lint检查代码时,得到提示Consider using apply() instead; commit writes its data to persistent storage immediately, whereas apply will handle it in the background通过阅读文档得知只要区别在于:commit() API Level 1。apply() API Level 9。 commit()有boolean返回值,确认是否写入数据成功。applay(原创 2021-04-30 09:55:41 · 436 阅读 · 0 评论 -
字体属性及测量 FontMetrics
最近的一个模块正好用到字体的相关内容,整理出来。(一) 字体的几个参数 ,以Android API文档定义为准,见下图要点如下:1. 基准点是baseline2. Ascent是baseline之上至字符最高处的距离3. Descent是baseline之下至字符最低处的距离4. Leading文档说的很含糊,其实是上一行字符的descent到下一行的ascent之间的距离5. Top指的是指的是最高字符到baseline的值,即ascent的最大值6. 同上,botto原创 2021-04-26 08:18:29 · 315 阅读 · 0 评论 -
Android LinearGradient线性渐变
1 linearGradient简介linearGradient线性渐变,会用到Paint的setShader,Shader 被称为着色器,在opengl中这个概念经常被用到,android中的shader主要用来给图像、文字着色,Shader在绘制过程中会返回横向重要的颜色组,Paint设置shader后,绘制时会从shader中获取颜色,也就是需要shader告诉画笔某处的颜色值。Shader 具体实现类包括:BitmapShader,ComposeShader,LinearGradient,原创 2021-04-19 11:35:02 · 5794 阅读 · 0 评论 -
Activity 跳转的生命周期变化
1)Activity1跳转到Activity2的生命周期流程 1.Activity1启动: Activity1: onCreate() Activity1: onStart() Activity1: onResume() 2.点击按钮跳转到Activity2: Activity1: onPause() Activity2: onCreate() Activity2: onStart() Activity2: onR原创 2021-04-18 08:55:16 · 1505 阅读 · 0 评论 -
Android 四种启动模式
1. Standard 标准模式说明:Android创建Activity时的默认模式,假设没有为Activity设置启动模式的话,默觉得标准模式。每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在。生命周期:如上所看到的,每次被创建的实例Activity 的生命周期符合典型情况,它的onCreate、onStart、onResume都会被调用。举例:此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为Standard 模式...原创 2021-04-17 16:16:27 · 937 阅读 · 1 评论 -
Android各国语言和Values文件夹命名规则
Android各国语言缩写ar 阿拉伯文ar_AE 阿拉伯文 (阿拉伯联合酋长国)ar_BH 阿拉伯文 (巴林)ar_DZ 阿拉伯文 (阿尔及利亚)ar_EG 阿拉伯文 (埃及)ar_IQ 阿拉伯文 (伊拉克)ar_JO 阿拉伯文 (约旦)ar_KW 阿拉伯文 (科威特)ar_LB 阿拉伯文 (黎巴嫩)ar_LY 阿拉伯文 (利比亚)ar_MA 阿拉伯文 (摩洛哥)ar_OM 阿拉伯文 (阿曼)ar_QA 阿拉伯文 (卡塔尔)ar_SA 阿拉伯文 (沙特阿拉伯)ar_SD 阿拉原创 2021-01-01 21:10:02 · 1871 阅读 · 0 评论 -
Android 全屏 隐藏虚拟菜单
应实际工作需要:实现App全屏并且隐藏虚拟菜单,解决办法:View decorView = getWindow().getDecorView();int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;...原创 2020-03-06 16:03:08 · 287 阅读 · 0 评论 -
Android 事件分发机制 讲解
1、分发事件的组件分发事件的组件,也称为分发事件者,包括Activity、ViewGroup和View。它们三者的一般结构为:从上图中可以看出,Activity包括了ViewGroup,ViewGroup又可以包含多个View。2、分发的核心方法负责对事件进行分发的方法主要有下面几个:dispatchTouchEvent()onInterceptTouchEvent()onTouc...原创 2020-02-20 16:28:18 · 201 阅读 · 0 评论 -
Android 判断手机的Rom类型
1、判断手机的Rom类型public class OSUtils { public static final String ROM_MIUI = "MIUI"; public static final String ROM_EMUI = "EMUI"; public static final String ROM_FLYME = "FLYME"; public s...原创 2020-02-17 21:22:02 · 708 阅读 · 0 评论 -
Android Studio如何导入swiperefreshlayout
SwipeRefreshLayout以前在v4包里,现在改到了androidx1、添加SwipeRefreshLayout1、File -> Project Structure 打开Project Structure界面2、Dependencies -> app -> +原创 2020-02-17 17:00:17 · 3041 阅读 · 1 评论 -
Gson解析
1、解析ObjectGson gson = new Gson();gson.fromJson(jsonString, Object.class);2、解析Object数组Gson gson = new Gson();gson.fromJson(jsonString, Object[].class);3、解析Object容器Gson gson = new Gson();gson....原创 2020-02-16 16:58:55 · 225 阅读 · 0 评论 -
Android 调用系统相册
启动相册 private void openAlbum() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, CHOOSE_PHOTO); }获取相册返...原创 2020-02-15 16:37:40 · 559 阅读 · 0 评论 -
MediaStore.ACTION_IMAGE_CAPTURE注意事项
Android自4.4(Api 19)开始,读写应用自身的文件已经不需要读写SD卡权限了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>我在测试调用摄像头拍照截图返回功能时,发现一些问题(自己暂时还不能理解),在此记录一下,如果有人知道原因,请留言告诉我一下1、android....原创 2020-02-15 09:55:22 · 4957 阅读 · 2 评论 -
Android 存储目录详解
1、内部存储和外部存储这里的存储指的是永久非易失的存储(rom),不是内存(ram)。这里的外部存储不是指特定的可移动的存储介质(如SD卡),现在很多Android手机都是一体机,普通消费者无法拆卸的,也没有扩展SD卡的的卡槽了,我们把手机本身自带的rom叫机身存储或内置存储。现在的Android设备都将机身存储划分了内部存储和外部存储,体现内部和外部的区别。如果可扩展可移动存储(如SD卡),...原创 2020-02-14 14:22:41 · 744 阅读 · 0 评论 -
INSTALL_FAILED_TEST_ONLY解决方法
今天直接运行、安装到手机上,发现安装失败(adb install同样失败),提示INSTALL_FAILED_TEST_ONLY,原来是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性➜ apk adb install '/home/silver/桌面/share/apk/a...原创 2020-02-13 19:24:57 · 11474 阅读 · 0 评论 -
Activity生命周期
1、Activity的生命周期2、Activity切换1、Activity A跳转到Activity B(如果B不是透明性质的Activity):A-----onPause()B-----onCreate()B-----onStart()B-----onResume()A-----onStop()点击Back键返回:B-----onPause()A-----onRe...原创 2020-02-11 10:38:33 · 127 阅读 · 0 评论 -
Android AIDL使用详解
一、概述AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来生成用于IPC的代码。从某种意义上说AIDL其实是一个模板,因为在使用过程中,实际起作用的并不是AIDL文件,而是据此而生成的一个IInterface的实例代码,AIDL其实是为了避免我们重复编写代...原创 2020-02-09 10:04:32 · 184 阅读 · 0 评论 -
RecyclerView拖拽的实现及一些特殊需求
1.创建ItemTouchHelper对象并绑定首先说一下关键点,在RecyclerView中实现拖拽排序时非常简单地,只需要个给RecyclerView添加一个ItemTouchHelper就可以实现,具体实现如下:ItemTouchHelper itemTouchHelp = new ItemTouchHelper(new CityRecycleCallBack(adapter)...原创 2020-02-07 09:57:07 · 1162 阅读 · 0 评论 -
Android 字体颜色渐变效果 Span实现
Android 实现字体颜色渐变效果public class LinearGradientFontSpan extends ReplacementSpan { private int mSize; private int startColor; private int endColor; public LinearGradientFontSpan(int ...原创 2020-02-06 14:50:07 · 1057 阅读 · 0 评论 -
约束布局ConstraintLayout详解
1.介绍约束布局ConstraintLayout 是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。ConstraintLayout 官方文档2.为什么要用ConstraintLayout在...原创 2020-02-05 11:43:12 · 594 阅读 · 0 评论 -
Android 8.0+ 应用图标适配
1、找到 mipmap-anydpi-v26 文件夹首先找到res目录下的mipmap-anydpi-v26文件夹,如果该文件夹被你删掉了,则创建一个该名称的文件夹2、适配按照下图指示打开 Image Asset出现下图这个界面后(下图为我自己调好大小后的截图),修改 Path 为你的 logo 图标放置路径,然后拖动下面的 Resize 滚动条,找到合适的图标大小...原创 2020-02-05 09:39:34 · 685 阅读 · 0 评论 -
Android @xml/file_paths详解
<files-path name="name" path="path" /> 物理路径相当于Context.getFilesDir() + /path/ <cache-path name="name" path="path" /> 物理路径相当于Context.getCacheDir() + /path/ <external-path name="name"...原创 2020-02-01 09:40:17 · 5473 阅读 · 0 评论 -
Android PendingIntent详解
PendingIntent主要有下面几个静态方法(当然还有其它方法)PendingIntent.getActivity(Contextcontext, int requestCode,Intentintent, int flags) --->启动ActivityPendingIntent.getBroadcast(Contextcontext, int...原创 2020-01-31 18:03:19 · 1513 阅读 · 0 评论 -
Android 判断当前应用是否开启消息通知
当APP有推送功能时,需要判断当前app在手机中是否开启了允许消息推送,否则即使添加了推送代码仍然收不到通知 private boolean isNotificationEnabled(Context context) { boolean isOpened = false; try { isOpened = NotificationMa...原创 2020-01-31 16:06:37 · 601 阅读 · 0 评论 -
Android O(8.0) Notification不显示的解决方案
1、Android O(8.0)通知的改变NotificationChannel是android8.0新增的特性,如果App的targetSDKVersion>=26,没有设置channel通知渠道的话,就会导致通知无法展示。Android O 引入了 通知渠道(Notification Channels),以提供统一的系统来帮助用户管理通知,如果是针对 android O 为目标平...原创 2020-01-31 15:57:53 · 1413 阅读 · 0 评论 -
Android数据库更新并保留原来数据
SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,并且只能在表的末尾添加字段,但是不能从表中删除字段。例如为表Subscription添加两个字段:1、ALTER TABLE Subscription ADD COLUMN Activation BLOB;2、ALTER TABLE Subscription ADD COLUMN Key BLOB;...原创 2020-01-30 22:57:23 · 293 阅读 · 0 评论 -
Android getFilesDir()、getCacheDir()、getExternalFilesDir()、getExternalCacheDir()的作用
getFilesDir、getCacheDirgetFilesDir()方法用于获取/data/data/应用包名/files目录getCacheDir()方法用于获取/data/data/应用包名/cache目录getExternalFilesDir、getExternalCacheDir应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。大部分应...原创 2020-01-30 14:45:24 · 2820 阅读 · 0 评论 -
Android Activity、Fragment间通信
Activity中获取Fragment// 用于静态创建的FragmentgetSupportFragmentManager().findFragmentById(int id);// 用于动态创建的FragmentgetSupportFragmentManager().findFragmentByTag(String tag);// 用于动态创建的FragmentgetSuppo...原创 2020-01-29 21:37:04 · 283 阅读 · 0 评论 -
Android Menu详解
菜单的分类菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单、上下文菜单/上下文操作模式以及弹出菜单。它们的主要区别如下:1、选项菜单是一个应用的主菜单项,用于放置对应用产生全局影响的操作,如搜索/设置。2、上下文菜单是用户长按某一元素时出现的浮动菜单。它提供的操作将影响所选内容,主要应用于列表中的每一项元素(如长按列表项弹出删除对话框)。上下文操作模式将在...原创 2020-01-28 12:19:23 · 579 阅读 · 0 评论 -
targetSdkVersion、compileSdkVersion、minSdkVersion作用与区别
Android Studio 新建一个工程后,build.gradle里会有targetSdkVersion、compileSdkVerson、minSdkVersion这几个字段,这些配置有啥意义呢?android { compileSdkVersion 28 buildToolsVersion "29.0.2" defaultConfig { ap...原创 2020-01-27 21:28:53 · 557 阅读 · 0 评论 -
Android ImageView属性
ImageView 继承自View组件,主要功能是用于显示图片,实际上它不仅仅可以用来显示图片,任何Drawable对象都可以使用ImageView来显示。ImageView可以适用于任何布局中,并且Android为其提供了缩放和着色的一些操作。1. foreground、src 和 background 属性区别1)background指的是背景,foreground指的是前景,而src...原创 2020-01-27 16:29:40 · 3436 阅读 · 0 评论 -
Android中Attributes、defStyleAttr、defStyleRes详解
系统自带的View可以在xml中配置属性,对于自定义View同样可以在xml中配置属性,为了使自定义的View的属性可以在xml中配置,需要以下4个步骤:1、通过<declare-styleable>为自定义View添加属性2、在xml中为相应的属性声明属性值3、在运行时(一般为构造函数)获取属性值4、将获取到的属性值应用到自定义View一般自定义View有一个构造...原创 2020-01-22 15:10:22 · 3133 阅读 · 0 评论 -
Android canvas-skew(错切)
斜切(skew)斜切只提供了一种方法:public void skew (float sx, float sy)参数含义:float sx:将画布在x方向上倾斜相应的角度,sx倾斜角度的tan值,float sy:将画布在y轴方向上倾斜相应的角度,sy为倾斜角度的tan值.变换后:X = x + sx * yY = y+sy * xskew之前首先绘制一个200x20...原创 2020-01-21 15:33:06 · 1888 阅读 · 0 评论 -
Android Path之Direction.CW、Direction.CCW
Path.Direction.CW:clockwise ,沿顺时针方向绘制Path.Direction.CCW:counter-clockwise ,沿逆时针方向绘制举个例子讲解:@Overrideprotected void onDraw(Canvas canvas) { super.onDraw(canvas); //设置画布背景颜色 canva...原创 2020-01-20 23:35:21 · 4417 阅读 · 0 评论 -
Drawable、Bitmap、ByteArray学习
Drawable:Android下的图形对象,可以装载png、gif、jpg、bmp等格式图像。Bitmap:位图,文件格式一般为bmp。可以将png、jpg、gif等格式图像转换成Bitmap。ByteArray:存放着图像的像素数据。 占用内存 绘制速度 支持像素操作 支持旋转缩放 支持透明度 Bitmap 大 慢 支持 ...原创 2020-01-20 14:41:05 · 399 阅读 · 0 评论 -
Android Paint学习总结
线交角:Paint.Join.:[#BEVEL|ROUND|MITER]注意:只有路径绘制的线才有交角效果/** * 角型测试:Paint.Join.BEVEL、Paint.Join.ROUND、Paint.Join.MITER * * @param canvas */private void testOfJoin(Canvas canvas) { mRedPaint....原创 2020-01-02 16:25:09 · 272 阅读 · 0 评论 -
Android Paint.Style属性
可选属性Paint.Style.FILL设置只绘制图形内容 Paint.Style.STROKE设置只绘制图形的边 Paint.Style.FILL_AND_STROKE设置都绘制效果图:原创 2020-01-02 16:05:11 · 219 阅读 · 0 评论 -
Android图片高斯模糊实现方案
1、使用Glide(一款很好的开源图片加载库,Github上搜索)Glide.with(this).load(service.getImageUri()).dontAnimate().error(R.drawable.error_img)// 设置高斯模糊.bitmapTransform(new BlurTransformation(this, 14, 3)).into(imag...原创 2020-01-02 10:02:33 · 893 阅读 · 0 评论