自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android gradle统一依赖版本:Composing builds

之前写过一篇Android gradle统一依赖版本:kotlin+buildSrc的集成使用,标题两者的区别可以参照再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度

2021-09-16 17:03:37 982 3

原创 Android mPaaS 接入流程

官方接入文档提前准备工作,Android Studio中安装mPaaS插件,安装完成之后,重启Android Studio1. 首先登录 阿里云产品页使用支付宝扫码登录即可,实名认证也用支付宝扫码认证就可以。1)点击创建应用,输入应用名称创建完之后是这样的2)点击上图的Android代码配置:3)点击上图的下载配置文件:4)输入右边框里的Package Name(应用包名),上传带签名的apk,然后点击下载配置:下载完之后解压出来的文件是这样的:5)点击Android

2021-07-21 18:01:29 2494 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 1140 5

原创 web前端学习资料

1. 最全的web前端自学教程视频,免费分享

2021-06-21 15:42:08 112

原创 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 1611 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 1837

原创 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 1722 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 2193

原创 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 3400 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 4084 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 3935

原创 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 2068

原创 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 3318 2

原创 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 792

原创 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 424 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 682

原创 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 1098

原创 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 226

原创 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 3613

原创 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 1617

原创 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 535

原创 Flutter Widget生命周期

1:1. initState:当Widget第一次插入到Widget树时会被调用,对于每一个State对象,Flutter framework只会调用一次该回调,所以,通常在该回调中做一些一次性的操作,如状态初始化、订阅子树的事件通知等。不能在该回调中调用BuildContext.dependOnInheritedWidgetOfExactType(该方法用于在Widget树上获取离当前widget最近的一个父级InheritFromWidget,关于InheritedWidget我们将在后面章节介绍

2020-07-20 14:55:47 1905

原创 Dart之Stream

StreamStream 也是用于接收异步事件数据,和Future 不同的是,它可以接收多个异步操作的结果(成功或失败)。 也就是说,在执行异步任务时,可以通过多次触发成功或失败事件来传递结果数据或错误异常。 Stream常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。举个例子:void main() { Stream.fromFutures([ //1s后返回结果 Future.delayed(Duration(seconds: 1), () { r

2020-07-09 17:03:55 1286

原创 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 8813

原创 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 19092 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 949

原创 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 5167 7

原创 Android 10 获取相册图片失败: open failed: EACCES

Android10获取相册图片失败

2020-04-21 15:38:25 4257 7

原创 Android自定义view整理

一、attr1.attr是什么(1)attr 的简单理解就是一个属性约束,约束具体属性字段的属性的数据类型(boolean、string、float…)(2)attr的文件名称不是固定的,只是方便理解和规范,也可以是其他名称,比如arrt、aesa…(3)其实我们经常在使用,比如我们界面的布局文件,从狭隘的方面理解只要用xml形式文件就涉及到约束,而attr就是其中的一种约束文件(类似S...

2020-03-27 09:12:23 75

转载 第一次在GitHub上提交代码

第一次在GitHub上提交代码

2020-03-27 09:10:03 159

原创 CSDN修改上传图片大小

CSDN如何调整图片的大小

2020-03-27 09:09:24 602

原创 Kotlin delay与sleep

delay:协程的延时是不会阻塞线程的,只会延时当前协程sleep:阻塞线程

2020-03-27 09:09:00 13559 3

原创 Kotlin关键字

let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。...

2020-03-27 09:08:47 294

转载 Android support和Androidx库不能共存问题

Android support和Androidx库不能共存问题

2020-03-27 09:05:50 2057

原创 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 633

原创 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 2413 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 2861

原创 Kotlin 对象声明,伴生对象,对象表达式

1.对象声明Kotlin 使用 object 关键字来声明一个对象。Kotlin 中我们可以方便的通过对象声明来获得一个单例。 object Dog{ fun eat(){ println("Eat food") } } fun main() { Dog.eat() }2.伴生对象类内部的...

2019-12-05 14:54:31 407

原创 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 365

原创 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 5557

空空如也

空空如也

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

TA关注的人

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