Android开发系列
最爱吃葡萄
Ung------
展开
-
AndroidStudio如何安装其他版本JDK
可以直接安装图中的指示,找到对应的选项卡,下载,或者添加JDK即可。原创 2024-03-05 11:55:33 · 620 阅读 · 2 评论 -
Android Studio 升级之后Logcat变了个鬼样子
在AndroidStudio 升级到Dolphin之后,Logcat变了。恢复到原来状态在下方。这是新增加的实验性功能,不过我感觉不如原来的好用,把前边的✅去掉就好了。原创 2023-02-10 15:34:52 · 553 阅读 · 0 评论 -
Serializable引起的崩溃NotSerializableException
此类中还调用了其他的类对象(也就是上文中的VipInfo),调用的类对象必须一并实现Serializable。在Android中使用时,我将它作为一个参数,通过Bundle传递给Fragment,但是在序列化时报错了。原创 2022-12-28 10:29:08 · 339 阅读 · 0 评论 -
Kotlin调用Java代码时引起空指针异常,要怎么避免?
在Android项目中,经常会出现Kotlin 代码调用Java代码的情况,而在Kotlin编译器中,有这样一个默认的规定,如果Java中的代码被Nullable标记才认为是可控类型,否则, 如果你不指定为可空类型,利用类型推断会直接断定为非空类型。在Java里边最麻烦的便是空指针异常,而即使转到了Kotlin,当调用Java 代码时,仍然会存在这样的问题。注释,包括Android框架中的代码,也不是所有的地方都加了该注释,这样不利于Kotlin编译器进行类型推断,当没被。原创 2022-11-25 16:54:38 · 1071 阅读 · 0 评论 -
Android 通过ContentResolver添加CalendarEvent,删除后在某些机型上依然存在问题
App添加日历提醒功能,添加到系统日历中,网上有很多例子,可以参考,在我的测试机上,点击开关时,去添加事件(同时添加提醒时间),点击关闭开关时,去删除事件(同时删除提醒)。在某些机型上,即使删除了事件,还是能查询得到事件,但相关提醒已经删除了。在判断事件是否存在时,同时判断,是否已经删除~~开关状态通过 判断事件是否存在来判断。projection中 添加。在查询的实体中,添加。原创 2022-09-19 15:14:23 · 553 阅读 · 0 评论 -
Android系统悬浮球开发,在Android12上不显示的问题排查与处理。
Android悬浮窗,横竖屏显示有问题原创 2022-08-08 20:21:20 · 3167 阅读 · 0 评论 -
MotionLayout切割子View
问题描述使用MotionLayout,高度设置为wrap_content, 增加padding,内部一个子View为TextView,发现先试试TextView下半部分被切割!源码<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2022-05-07 20:23:17 · 229 阅读 · 0 评论 -
Java中的线程安全(2)之互斥同步的底层原理
Java中的线程安全(2)之互斥同步的底层原理本来在理解完互斥同步之后,应该开始扒一扒Lock的源码了,但是在真正进入源码阶段之前,需要先按照常人的思维去理解一下,如果,让我们自己实现一个这样的互斥同步,我们该如何实现互斥同步呢?互斥同步都需要什么呢?首先,我不是所有代码都需要互斥访问,那么在需要互斥访问的地方,我需要有一个标记,证明我的代码是要互斥访问的。其次,我需要一个标志位,来控制这段互斥访问的代码,是否正在被别的线程访问着。如果多个线程都想要访问这段代码,需要一定的机制,让非正在访问的线程原创 2022-04-06 11:04:58 · 2692 阅读 · 0 评论 -
Java中的线程安全(1)之互斥同步
Java中的线程安全(1)之互斥同步最近的一段时间见一直在研究线程安全的实现原理。以前知道Java给提供了synchronized关键字和JUC工具包可以用来实现线程安全访问。当时我就有一些疑问,为什么需要这样的工具?而以上的这两种方式分别是怎样保证的线程工具?总结下来就是这样两个问题:synchronized关键字是来解决什么问题?为什么它能解决这样的问题?有了synchronized为什么又出了Lock?1. synchronized关键字是来解决什么问题?在解释这个问题之前,先看原创 2022-03-17 20:04:10 · 708 阅读 · 0 评论 -
Flutter 自己封装TextField,导致在列表中数据更新时,数据显示错乱问题。
需求有一个可输入的列表,输入列表会根据选择的选项不同,而输入不同内容。比如:选择 Vip客户时,需要输入:姓名,手机号,住址,Vip时长,付款方式选择普通用户时,需要输入:姓名,手机号,住址。实现使用ListView展示所有的输入项,因为输入框具有通用性。所以做了一个简单的封装。左侧为标题,右侧为输入内容,空内容时,展示hint提示请输入。大概是这样的样式-----------------------------客户类型 ⊙Vip ⊙普通------------原创 2021-12-28 11:33:03 · 1766 阅读 · 0 评论 -
Exception in thread “main“ java.util.zip.ZipException: zip file is empty
Exception in thread “main” java.util.zip.ZipException: zip file is empty在构建flutter项目时,出现了如下错误:Exception in thread "main" java.util.zip.ZipException: zip file is empty at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1581) at原创 2021-11-23 11:08:00 · 2608 阅读 · 3 评论 -
Flutter从2.2.3升级到2.5版本之后,混合项目编译变慢
目录解决方案分析过程1、build窗口中打印了很多dependence 信息2、分析最近代码变更3、最近只进行过flutter升级4、查找flutter模块构建过程如题,Flutter从2.2.3升级到2.5版本之后,build时间非常之长,发现构建的控制台中打印了项目中的所有依赖信息,导致时间变长。解决方案找flutter SDK的存放位置,修改flutter.gradle文件:文件路径:$flutter_sdk$/packages/flutter_tools/gradle/flutter.gra原创 2021-09-23 16:42:29 · 1160 阅读 · 2 评论 -
[第三方框架]网络访问框架之Retrofit2(2)-增加点配置
文章目录0. 前言1.将请求参数打印出来①。引入Log包②。创建OkHttpClient并设置好Log展示方式③。将okHttpClient设置到Retrofit对象中2、增加Json解析①。引入Json解析库②。设置ConverterFactory3、与RxJava配合使用①。引入RxJava的库、RxJava-Retrofit的支持库②。将RxJava的CallAdapter加入到Retrofit中③。使用RxJava的方式定义ApiService0. 前言在上一篇文章中([第三方框架]网络请求框架原创 2021-07-20 13:51:07 · 225 阅读 · 0 评论 -
[第三方框架]网络请求框架之Retrofit2(1)--上手指南
文章目录Retrofit2使用步骤总结1、在`build.gradle`中引用`Retrofit`库2、定义**ApiService**3、创建`Retrofit`对象、创建API实例,发起请求Retrofit2使用步骤总结在build.gradle中引用Retrofit库定义接口 ApiService,里边通过注解或者参数声明某个请求的配置信息等内容创建Retrofit对象,设置好CallAdapter与Converter通过Retrofit对象的create方法,创建接口的实例apiServ原创 2021-07-19 13:21:21 · 431 阅读 · 0 评论 -
Android 系统下通过系统时间去读取数据库记录,引发的读取记录不全问题!
Android 系统下通过系统时间去读取数据库记录,引发的读取记录不全问题!需求问题发现问题解决过程需求数据库中存储了一些记录,带时间戳的。需要我读取当天的数据(根据Android平板的时间进行读取)所以就有了如下的代码:Calendar instance = Calendar.getInstance();instance.set(Calendar.SECOND, 0);instance.set(Calendar.HOUR, 0);instance.set(Calendar.MINUTE, 0原创 2021-05-13 13:48:37 · 190 阅读 · 0 评论 -
GridLayout平均分配空间
GridLayout平均分配空间始末:在使用Gridlayout时,想要做一个横向平均分配的布局,像这样的:都知道,设置一个columnCount 配合上app:layout_columnWeight="1"即可可是当某一个的文字过长时,就会出现下面的情况:解决方案:将所有的TextView加上一个属性:android:layout_width="0dp"即可。源码:<?...原创 2020-04-23 10:54:19 · 8424 阅读 · 3 评论 -
AndroidStudio下使用Lambda表达式
AndroidStudio下使用LambdaLambda在Java8得到支持,那么在开发Android项目时如何设置支持Lamdba表达式呢?Google官方方式使用Java8时,需要新的Jack工具链 javac工具链: javac (.java --> .class) --> dx(.class --> .dex)Jack工具链:Jack (.java --> .jack -->原创 2017-07-28 17:23:19 · 563 阅读 · 0 评论 -
Android开发者必须要了解的View工作过程(总览)
View的工作原理之总览View是Android系统中特别重要的部分,它展示了Activity中的界面效果.Android中,TextView、EditView、LinearLayout......等实际上都属于View目录1. View的整体工作过程 1.1 伪代码1.2 界面结构1.3 工作过程2. 测量(measure)过程 2.1 测量过程图 3. 布局(...原创 2018-06-22 13:38:17 · 2915 阅读 · 0 评论 -
没有做好调查,你就敢使用一个新的Android第三方框架?
使用一个新的Android第三方库需要做哪些考虑目录基本信息 优缺点大小是否存在so包变更履历同类库比较开源协议语言支持 Java语言 kotlin支持gradle配置 混淆文件配置 基本使用 是否需要context是否需要初始化线程相关实例创建 是否需要封装 实例是否缓存IO操作 资源释放推荐视频教程广告 1 基本信息...原创 2018-06-01 10:42:02 · 3367 阅读 · 2 评论 -
Android获取View准确宽高的三种方法
有时我们需要获取View的宽高,但是即使我们在onResume中获取,有时候也是不准确的。那么到底该如何获取View准确的宽高呢?目录1. 通过onWindowFocusChanged方法2. 通过View.post()来实现3. 通过ViewTreeObserver的OnGlobalLayoutListener回调1. 通过onWindowFocusChanged方法...原创 2018-06-29 15:05:10 · 9125 阅读 · 0 评论 -
[解决问题系]Android中View与ViewGroup获取内容宽高
我们都知道,在View中提供了getWidth与getHeight方法,但是这两个方法获取到的都是View的高度,而不是View中内容的高度,那么内容的高度如何获取呢??目录1. 什么是内容的高度2. 为什么获取内容的高度3. 如何获取内容高度 3.1 ViewGroup获取内容高度?(以竖直方向的LinearLayout为例)3.2 View的内容高度获取(以TextView为...原创 2018-06-25 17:13:32 · 5415 阅读 · 0 评论 -
Android开发者必须要了解的View测量过程(View的工作过程之Measure过程)
View的工作原理之测量过程目录1. 详细测量过程 1.1 测量过程到底要测量什么? 1.2 详细过程说明1.3 测量概念说明 1.3.1 测量的是ViewGroup的宽高,不是内容的宽高1.3.2 测量的是View的宽高,不是内容的宽高2. 一般情况下的测量过程中要做的事情(通常的操作) 2.1 测量 2.1.1 View与ViewGroup不同测量2.1...原创 2018-07-02 10:38:27 · 28003 阅读 · 0 评论 -
Android开发者必须要了解的View布局过程(View的工作之Layout过程)
View的工作原理之layout过程目录1. 详细布局过程 1.1 布局过程到底要做什么?1.2 布局相关的属性Frame2. 自定义onLayout,简单实现FloatingButton 2.1 效果图2.2 avtivity.xml2.3 CustomFloatingView.java1. 详细布局过程1.1 布局过程到底要做什么?...原创 2018-07-02 10:44:48 · 29837 阅读 · 0 评论 -
Android开发者必须要了解的View绘制过程(View的工作原理之Draw过程)
View的工作原理之绘制过程目录1. View的详细绘制过程 1.1 绘制过程到底要做一些什么?1.2 画在哪?1.3 如何画?1.4 用什么画?1.5 整个流程2. View与Canvas的关系 3. 案例绘制一个长方形 3.1 效果图3.2 activity.xml3.3 DrawView.java1. View的详细绘制过程...原创 2018-07-02 10:50:42 · 28131 阅读 · 0 评论 -
Android多点触控问题解决(windowEnableSplitTouch, splitMotionEvents)
问题在Android开发过程中,有时在一个页面中有很多按钮,点击按钮会跳转到不同的页面,但是有时同时点击两个以上按钮时,会导致同时打开了多个页面,这时该怎么办呢?解决思路控制多点触控,不需要多点触控的界面设置禁用多点触控,保证一次点击事件只传递到一个View。设置 windowEnableSplitTouch(控制Window之间的)设置 splitMotionEvents...原创 2018-09-17 11:50:30 · 5319 阅读 · 0 评论 -
[解决问题系] DialogFragment can not be attached to a container view
DialogFragment can not be attached to a container view问题始末在一个DialogFragment中,显示了另一个Dialog,另一个Dialog显示时,点击确定按钮则将当前的Dialog再次显示伪代码结构class MyDialogFragment extends DiabogFragment { View contentView;...原创 2019-01-16 09:26:23 · 6547 阅读 · 0 评论 -
Android布局文件,include使用之后,你真的了解吗?
目录什么是include为什么使用include怎么使用include 步骤Sample 定义共通布局在想要引入的布局中引入运行效果include之后,布局变成了什么样? 当我们include两个同样的布局时当include两个相同的布局时,如果区别? include之后,使用新的id区分这时通过include时指定的id来获取View此时运行时布局实际结构?...原创 2018-06-04 16:40:14 · 57230 阅读 · 4 评论 -
Activity常见Flags(CLEAR_TOP与各种Activity启动模式连用详解)
Activity有很多Flag ,一些Flag可以用来设置启动模式,一些可以用来影响Activity的运行状态,这里介绍常见的FLAG一般通过在Intent设置:Intent intent = new Intent();intent.setFlag(XXFLAG | XXXFLAG);一、更改Activity启动模式FLAG_ACTIVITY_NEW_TASK...原创 2018-05-25 13:41:40 · 36166 阅读 · 2 评论 -
[解决问题系]——SearchView去掉默认的下划线
SearchView 移除下划线layout布局&amp;amp;lt;android.support.v7.widget.SearchView android:id=&amp;quot;@+id/sv_without_underline&amp;quot; android:layout_width=&amp;quot;match_parent&amp;quot; android:layo原创 2018-05-25 10:45:26 · 31335 阅读 · 0 评论 -
闭包(Java中的闭包)
闭包Java中的闭包What简单理解WHYHOWJava中的闭包内部类局部内部类匿名内部类闭包(Java中的闭包):What闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。 —《百度百科》 是引用了自由变量的函数。这个函数通常被定义在另一个外部函数中,并且引用了外部函数中的变原创 2017-07-28 17:20:47 · 17547 阅读 · 6 评论 -
# Lambda表达式基础使用(Android)
WhatWHYHOW先决条件使用环境函数式接口Functional InterfaceLambda表达式的语法基本语法简单例子方法引用Java提供的SAMSingleAbstractMethod接口Samples自定义SAM接口使用lambda表达式Runnable的Lambda用法使用ComparatorStreamWhatWhyHow使用示例使用Lambd原创 2017-08-04 17:48:12 · 483 阅读 · 0 评论 -
在Android项目中使用FCM(FirebaeCloudMessage)
WhatWhyHow在Firebase中建立想要推送功能的App下载google-servicesjson文件并将文件放置在app目录下加入Firebase需要的包添加FCM相关服务在manifest文件中声明服务在manifest文件中设置当App后天运行时接收Notification样式使用注意问题1 程序前台运行2 程序后台运行WhatFCM是GCM的升级版本(Googl原创 2017-08-04 17:46:46 · 2078 阅读 · 0 评论 -
AndroidObb文件编程中使用详解
AndroidObb文件编程中使用详解制作Obb文件在代码中加入下载和读入Obb文件的逻辑1 下载DownloaderLibrary需要的包2 将Google Play License Library 与 Google Play Downloader Library导入到项目中注意在需要检查Obb文件的地方加入相关逻辑1 声明权限2 实现下载服务3 实现AlarmReceiver原创 2017-08-10 09:59:42 · 11621 阅读 · 0 评论 -
Android gradle 中使用 buildType
WhatWhyHow构建类型中可以定义的属性buildTypes的使用位置一些使用技巧通过buildConfigField配置通用属性添加包名后缀WhatbuildType 顾名思义:构建类型。在Android Studio中Android项目默认构建工具是gradle,而项目在建立是就存在了两种构建类型:debug与release.Why使用buildType来指定Andrioid原创 2017-08-03 08:45:38 · 2667 阅读 · 0 评论 -
GoogleAnalytics与FirebaseCloudMessage同时使用
WhatWhyHow最简单的做法若Google不想导入到Firebase下需要进行json文件合并分别建立Google项目与Firebase项目注意使用同样的包名以在Firebase项目下载的google-servicesjson文件为基准修改json文件services节点数据WhatGoogleAnalytics是Google旗下分析工具,可用于统计APP信息,如屏幕信息、事件、并原创 2017-08-02 12:48:00 · 1430 阅读 · 3 评论 -
Android root 权限
Android root 权限WhatWhyHow如何判断手机是否存在root权限根据手机对应目录下是否存在su来判断手机是否root通过执行测试命令判断是否具有root权限会产生弹窗通过执行su命令来判断Root权限会产生弹窗Android root 权限Whatroot权限就是Android系统管理员用户所拥有的权限,它可以访问和修改手机几乎所有的文件,只有root才具备最高级别原创 2017-07-31 14:22:50 · 445 阅读 · 0 评论 -
Android gradle 中使用productFlavors
WhatWhyHow创建不同的产品创建不同的产品并为不同产品分配专有属性设置不同代码引用先在src目录下简历对应的文件夹比如java代码则建立productjavares文件夹则建立productres建立包名建立Java类文件在app-level下的gradle文件中设置sourceSets设置不同的产品引入不同的包源码地址WhatproductFlavors是在gradle中原创 2017-08-01 13:10:08 · 10427 阅读 · 4 评论 -
Android中妙用Selector实现颜色图片切换效果
在目前的安卓开发中,很多情况下,都会涉及到颜色变化,比如应用程序中下方的按钮,当我们点击按钮的时候,希望更换图片或者是按钮中的颜色发生变化,这种颜色的改变使得用户能够更加清晰的看到所处的“功能”。通过逻辑代码实现文字的改变并不特别方便,所以,本文将介绍使用selector对文字或者图片进行修改。本文例子中,使用RadioButton进行按钮的设置,不多废话,上效果。原始效果:原创 2016-08-26 13:45:01 · 7763 阅读 · 0 评论 -
Android 使用obb扩展App
jobb Tools在Application中使用用于Google Play Expansion Files读取Obb文件中的图片资源步骤代码示例应该注意的问题some questionsjobb Tools制作成OBB(Opaque Binary Blob)格式文件的一种工具,在Android SDK中, %ANDROID——HOME/tools%中,在tools/bin下有jobb原创 2017-08-07 16:22:53 · 11798 阅读 · 0 评论 -
Android屏幕适配
屏幕适配基础知识屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米 常见的屏幕尺寸:3.5,3.7,4.2,5.0,5.15 屏幕分辨率屏幕分辨率指在横纵向上的像素点数,单位是px,1px = 1个像素点,一般以纵x横 eg:1920 x 1080屏幕像素密度指每英寸上的像素点数单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在转载 2017-07-20 16:29:45 · 528 阅读 · 0 评论