![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
文章平均质量分 55
乌克丽丽丶
会当凌绝顶,一览众山小!
展开
-
Android gradle统一依赖版本:Composing builds
之前写过一篇Android gradle统一依赖版本:kotlin+buildSrc的集成使用,标题两者的区别可以参照再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度原创 2021-09-16 17:03:37 · 1027 阅读 · 3 评论 -
Android mPaaS 接入流程
官方接入文档提前准备工作,Android Studio中安装mPaaS插件,安装完成之后,重启Android Studio1. 首先登录 阿里云产品页使用支付宝扫码登录即可,实名认证也用支付宝扫码认证就可以。1)点击创建应用,输入应用名称创建完之后是这样的2)点击上图的Android代码配置:3)点击上图的下载配置文件:4)输入右边框里的Package Name(应用包名),上传带签名的apk,然后点击下载配置:下载完之后解压出来的文件是这样的:5)点击Android原创 2021-07-21 18:01:29 · 2767 阅读 · 4 评论 -
Android Activity Result API 使用
1.在app下的build.gradle引入:implementation 'androidx.activity:activity:1.2.0-beta01'implementation 'androidx.fragment:fragment:1.3.0-beta01'2.页面普通跳转(原startActivityForResult)(1)第一个页面:class MainActivity : AppCompatActivity() { private lateinit var text原创 2021-07-20 15:05:06 · 1217 阅读 · 5 评论 -
Kotlin中@JvmOverloads、@JvmStatic、@JvmField、@JvmName、@JvmMultifileClass
1. @JvmOverloads一句话就是为了解决Java不能重载kotlin 有默认参数的方法比如Kotlin代码如下调用是没有问题的:class Test { fun testJvm(a: String, b: Int = 1) { } fun abc() { testJvm("a") testJvm("a", 3) }}但是如果java中调用:class TestJava { private void tt原创 2021-05-10 13:22:39 · 1674 阅读 · 3 评论 -
Android gradle统一依赖版本:kotlin+buildSrc
步骤:在项目根目录下新建一个名为buildSrc的文件夹(与项目里的app文件夹同级)。在buildSrc文件夹里创建名为build.gradle.kts的文件在buildSrc文件夹里创建src/main/java文件夹,如下图所示。并在该文件夹下创建Dependencies.kt文件1. 项目根目录创建文件夹 buildSrc,与app同级,然后新建如下文件夹以及文件:以下直接复制即可build.gradle.kts:plugins { `kotlin-dsl`}rep原创 2021-04-14 11:30:41 · 1974 阅读 · 0 评论 -
Android Studio gradle 统一版本管理
一、第一种方式:1.在项目的根目录下面创建一个 xxx.gradle 文件,名字可以自定义,比如 versions.gradle2.在versions.gradle里面添加如下依赖:ext { //app相关的版本 android = [ compileSdkVersion: 30, minSdkVersion : 23, targetSdkVersion : 30, version原创 2021-01-28 10:56:42 · 1883 阅读 · 1 评论 -
Android 自定义随意拖拽布局
效果图如下:1. 自定义view如下:package com.example.myapplicationimport android.content.Contextimport android.util.AttributeSetimport android.view.MotionEventimport android.widget.RelativeLayoutimport kotlin.math.absclass CustomDragView @JvmOverloads constru原创 2021-01-27 13:51:28 · 2293 阅读 · 0 评论 -
Android CameraX 使用
1.使用限制需要依赖最低 API 是21,也就是Android5.0。Android Studio 版本 3.6 及以上2. 在app下的build.module的dependencies中添加如下依赖: def camerax_version = "1.0.0-beta07"// CameraX core library using camera2 implementation implementation "androidx.camera:camera-camera2:$camer原创 2021-01-25 15:11:14 · 3541 阅读 · 5 评论 -
Flutter 组件之 Swiper(轮播图)
flutter实现轮播图效果1.在项目目录下的pubspec.yaml添加flutter_swiper依赖,然后点击Pub getflutter_swiper: ^1.1.42.使用如下:import 'package:flutter/material.dart';import 'package:flutter_swiper/flutter_swiper.dart';class SwiperDefaultPage extends StatefulWidget { @override原创 2021-01-21 18:01:35 · 4281 阅读 · 4 评论 -
解决Android Studio gradle 下载失败的问题
遇到Android Studio下载gradle 慢或者下载失败的问题,解决方案如下:1.到项目目录下的gradle文件夹下的wrapper文件夹,下面的 gradle-wrapper.properties, 打开该文件,将distributionUrl后面的地址复制出来复制内容: https://services.gradle.org/distributions/gradle-5.6.4-all.zip注意要去掉https后面的斜线!2.然后将该地址使用浏览器打开,或者使用迅雷创建下载,我是使原创 2021-01-18 15:33:28 · 4220 阅读 · 0 评论 -
Flutter Widget 之 Expanded(填充布局)
Flutter的Expanded布局与Android布局中weight属性类似,可以设置占满剩余空间。1. Expanded构造方法:const Expanded({ Key key, int flex = 1, //占比 @required Widget child, }) : super(key: key, flex: flex, fit: FlexFit.tight, child: child);示例:import 'package:flutter/materia原创 2021-01-13 18:00:37 · 2221 阅读 · 0 评论 -
Kotlin使用Parcelable序列化数据类
一、正常使用:data class User( val name: String?, val sex: String?, val age: Int): Parcelable { constructor(parcel: Parcel) : this( parcel.readString(), parcel.readString(), parcel.readInt() ) { } overri原创 2021-01-04 14:24:27 · 3562 阅读 · 2 评论 -
Kotlin关键字
let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。...原创 2020-03-27 09:08:47 · 343 阅读 · 0 评论 -
Kotlin delay与sleep
delay:协程的延时是不会阻塞线程的,只会延时当前协程sleep:阻塞线程原创 2020-03-27 09:09:00 · 13699 阅读 · 3 评论 -
Kotlin使用委托模式封装SharedPreferences工具类
1. 工具类封装:class SPreference<T>(private val name: String, private val default: T) : ReadWriteProperty<Any?, T> { companion object { lateinit var preference: SharedPreferences fun setContext(context: Context) {原创 2020-11-17 16:40:23 · 881 阅读 · 0 评论 -
Android面试(一)线程、多线程和线程池
1. 开启线程的三种方式?继承Thread类,重写run()方法,在run()方法体中编写要完成的任务 new Thread().start();实现Runnable接口,实现run()方法 new Thread(new MyRunnable()).start();实现Callable接口MyCallable类,实现call()方法,使用FutureTask类来包装Callable对象,使用FutureTask对象作为Thread对象的target创建并启动线程;调用FutureTask对象的get原创 2020-11-04 17:15:05 · 460 阅读 · 1 评论 -
Android Bitmap压缩
一、质量压缩 private void compressQuality() { Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test); mSrcSize = bm.getByteCount() + "byte"; ByteArrayOutputStream bos = new ByteArrayOutputStream(); bm.compre原创 2020-10-28 16:23:54 · 741 阅读 · 0 评论 -
Kotlin 接口回调示例
1. 只有一个方法时://接口定义:private var onDeleteListener: ((String) -> Unit)? = null fun setOnDeleteListener(onDeleteListener: ((String) -> Unit)) { this.onDeleteListener = onDeleteListener } // 使用onDeleteListener?.invoke("delete")原创 2020-09-22 09:34:15 · 1143 阅读 · 0 评论 -
Android UDP socket模拟聊天的示例
Client Afun main() { Thread(Runnable { receive() }).start() send()}// A接收消息private fun receive() { print("Client A Receiver Start...") //1.创建udp的socket服务,并声明端口号 val ds = DatagramSocket(6666) //无限循环,一直处于接收状态 whi原创 2020-09-19 16:33:41 · 251 阅读 · 0 评论 -
Flutter 组件之 ListView
一、 ListView默认构造方法 ListView({ //可滚动widget公共参数 Key key, Axis scrollDirection = Axis.vertical, //设置滑动方向 Axis.horizontal 水平 默认 Axis.vertical 垂直 bool reverse = false, //是否倒序显示 默认正序 false 倒序true ScrollController controller, //滑动监听原创 2020-08-19 15:38:56 · 3693 阅读 · 0 评论 -
Flutter Widget 之 Stack(层叠布局)
Flutter中的层叠布局 Stack 与Android的FrameLayout相似。子控件是相对于父布局放置的,运行子控件堆叠起来。Stack源码如下: Stack({ Key key, this.alignment = AlignmentDirectional.topStart, this.textDirection, this.fit = StackFit.loose, this.overflow = Overflow.clip, List<W原创 2020-08-14 10:37:00 · 1810 阅读 · 0 评论 -
Flutter之 文本及样式
一、Textchildren: <Widget>[ Text('Hello Flutter!', textAlign: TextAlign.left, ), Text('Hello Flutter!'*10, maxLines: 1, overflow: TextOverflow.ellipsis, ), Text('Hello原创 2020-07-20 15:40:35 · 558 阅读 · 0 评论 -
Flutter Widget生命周期
1:1. initState:当Widget第一次插入到Widget树时会被调用,对于每一个State对象,Flutter framework只会调用一次该回调,所以,通常在该回调中做一些一次性的操作,如状态初始化、订阅子树的事件通知等。不能在该回调中调用BuildContext.dependOnInheritedWidgetOfExactType(该方法用于在Widget树上获取离当前widget最近的一个父级InheritFromWidget,关于InheritedWidget我们将在后面章节介绍原创 2020-07-20 14:55:47 · 1971 阅读 · 0 评论 -
Dart之Stream
StreamStream 也是用于接收异步事件数据,和Future 不同的是,它可以接收多个异步操作的结果(成功或失败)。 也就是说,在执行异步任务时,可以通过多次触发成功或失败事件来传递结果数据或错误异常。 Stream常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。举个例子:void main() { Stream.fromFutures([ //1s后返回结果 Future.delayed(Duration(seconds: 1), () { r原创 2020-07-09 17:03:55 · 1318 阅读 · 0 评论 -
Dart之Future
FutureDart类库有非常多的返回Future或者Stream对象的函数。 这些函数被称为异步函数:它们只会在设置好一些耗时操作之后返回,比如像 IO操作。而不是等到这个操作完成。async和await关键词支持了异步编程,允许您写出和同步代码很像的异步代码。1. Future.then使用 Future.delayed 模拟一个耗时操作,2秒后返回字符串“Hello Dart”,然后在then中接收到异步返回值,并打印出来:Future.delayed(new Duration(seco原创 2020-07-09 16:20:57 · 8884 阅读 · 0 评论 -
Flutter新建项目运行报错Could not determine the dependencies of task ‘:app:compileDebugJavaWithJavac‘.
Flutter新建项目运行报错,错误如下这个问题是Google被墙了,需要配置阿里云镜像第一步:修改android目录下的build.gradle文件中的buildscript { ext.kotlin_version = '1.3.50' repositories {// google()// jcenter() maven { url 'https://maven.aliyun.com/repository/google' }原创 2020-07-03 16:15:48 · 19299 阅读 · 9 评论 -
Flutter配置
1.下载Flutter sdk官方下载地址2. 环境变量配置1.用户变量里面配置key:FLUTTER_STORAGE_BASE_URLvalue:https://storage.flutter-io.cnkey:PUB_HOSTED_URLvalue:https://pub.flutter-io.cn2.系统环境变量里面 Path下配置 flutter bin的地址:D:\fluttersdk\flutter_windows_1.17.5-stable\flutter\bin3. 配置原创 2020-07-02 14:37:59 · 973 阅读 · 0 评论 -
Android Studio4.0引入arr包和jar包方式
Android Studio升级到 4.0 并且gradle_plugin 也更新到4.0.0,之后引入jar包和arr包的方式有所变更。1.File -> New -> New Module引入完成之后可以根据自己的习惯 添加一个新的文件夹存放 arr和jar 如图:然后将引入的arr或jar包拷贝到这下面。2.在使用到的module下的 build.gradle:api project(":arr名称")3.在项目下的settings.gradle中引入:include原创 2020-06-05 18:17:56 · 5238 阅读 · 7 评论 -
Android 10 获取相册图片失败: open failed: EACCES
Android10获取相册图片失败原创 2020-04-21 15:38:25 · 4296 阅读 · 7 评论 -
Android shape绘制常用图形
1.纯色园<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@color/text_color_fc"...原创 2020-03-26 21:05:00 · 701 阅读 · 0 评论 -
Android orhanobut/logger的使用
1.github地址 https://github.com/orhanobut/logger2. android studio 导入 compile ‘com.orhanobut:logger:2.1.1’3. 初始化 Logger.addLogAdapter(new AndroidLogAdapter());自定义loggerFormatStrategy formatStrategy...原创 2020-01-13 15:12:55 · 2498 阅读 · 1 评论 -
Kotlin使用Gson解析本地json数据
1.本地res文件夹下新建一个raw文件夹,json文件放进去。1)java加载方式:public class StreamUtils { public static String get(Context context, int id) { InputStream stream = context.getResources().openRawResource(id); retu...原创 2019-12-10 16:12:36 · 2944 阅读 · 0 评论 -
Kotlin 对象声明,伴生对象,对象表达式
1.对象声明Kotlin 使用 object 关键字来声明一个对象。Kotlin 中我们可以方便的通过对象声明来获得一个单例。 object Dog{ fun eat(){ println("Eat food") } } fun main() { Dog.eat() }2.伴生对象类内部的...原创 2019-12-05 14:54:31 · 433 阅读 · 0 评论 -
Kotlin单例模式
1.Object使用对象声明 objectobject Singleton { const val a = 1 var b = 2 fun add(): Int { return a + b }}直接用object代替class修饰类就是单例,对应的java代码就是:public final class Singleton { pu...原创 2019-12-05 14:22:22 · 387 阅读 · 0 评论 -
Kotlin判断一个数组中是否有相同的元素
1.如果只是需要判断是否包含相同元素而不是要找出相同元素有哪些,直接放在set集合中,然后看set集合和数组长度是否一致即可fun main() { val array = arrayOf(1, 7, 2, 4, 9, 2) val sameSet = mutableSetOf<Int>() for (item in array){ sameS...原创 2019-12-05 10:04:02 · 5750 阅读 · 0 评论 -
ArrayList与LinkList区别
ArrayList与LinkList区别是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。注意双向链表和双向循环链表的区别,下面有介绍到!)插入和删除是否受元素位置的影响...原创 2019-12-04 20:00:36 · 261 阅读 · 0 评论 -
Android notifyDataSetChanged()数据没有刷新
如果adapter添加的list是通过构造方法传递过去的,这个list不能重新赋值,不然指向的内存地址就发生了改变,adapter刷新是监听的数据的内存,该内存的数据发生变化之后 调用notifyDataSetChanged才会刷新,改变了内存地址就不会刷新。可以通过操作list.clear(), 然后list.addAll(dataList), 再或者通过set方法把数据源传递给adapter....原创 2019-11-30 14:15:20 · 845 阅读 · 0 评论 -
Kotlin作用域函数 let、run、with、apply 以及 also
一、区别由于作用域函数本质上都非常相似,因此了解它们之间的区别很重要。每个作用域函数之间有两个主要区别:–引用上下文对象的方式–返回值1.上下文对象:this 还是 it(1)thisrun、with 以及 apply 通过关键字 this 引用上下文对象。因此,在它们的 lambda 表达式中可以像在普通的类函数中一样访问上下文对象。在大多数场景,当你访问接收者对象时你可以省略 ...原创 2019-11-23 15:00:06 · 247 阅读 · 0 评论 -
Android动画
Android三种动画View Animation(视觉动画)Drawable Animation(帧动画)Property Animation(属性动画)1.View Animation(视觉动画)视觉动画的作用对象是view,支持四种动画效果,分别是平移动画、缩放动画、旋转动画和透明度动画。名称标签子类效果平移动画< translate &g...原创 2019-09-27 17:16:53 · 247 阅读 · 0 评论 -
Android自定义view整理
一、attr1.attr是什么(1)attr 的简单理解就是一个属性约束,约束具体属性字段的属性的数据类型(boolean、string、float…)(2)attr的文件名称不是固定的,只是方便理解和规范,也可以是其他名称,比如arrt、aesa…(3)其实我们经常在使用,比如我们界面的布局文件,从狭隘的方面理解只要用xml形式文件就涉及到约束,而attr就是其中的一种约束文件(类似S...原创 2020-03-27 09:12:23 · 89 阅读 · 0 评论