android开发kotlin项目Proguard混淆配置记录

-flattenpackagehierarchy-allowaccessmodification-keepattributesExceptions,InnerClasses,Signature,SourceFile,LineNumberTable,-dontskipnonpubliclibraryclassmembers-ignorewarnings#kotlin-keepclasskotlin.**{*;}-keepclasskotlin.Metadata{*;}-dontwarnkotlin.**-keepclassmembersclass**$WhenMappings{<fields>;}-keepclassmembersclasskotlin.Metadata{public<methods>;}-assumenosideeffectsclasskotlin.jvm.internal.Intrinsics{staticvoidcheckParameterIsNotNull(java.lang.Object,java.lang.String);}-keepc...

android开发startActivityForResult从系统自带的文件管理器文件选择兼容各个版本

valintent=Intent(Intent.ACTION_GET_CONTENT)intent.type="*/*"intent.addCategory(Intent.CATEGORY_OPENABLE)activity.startActivityForResult(intent,requestCode)overridefunonActivityResult(requestCode:Int,resultCode:Int,data:Intent?){super.onActivityResult(requestCode,resultCode,data)valfilepath=PathUtils.getPath(activity,data?.data)}/***http://stackoverflow.com/a/27271131/4739220*https://stackoverflow.com/questions/19985286/convert-content-uri-to-actual-path-in-android-4-4/27271131#27271131*/publiccl...

Android开发长按某个控件将PopupWindow显示在手指长按的位置处的实现方法

//Kotlin语法classTestActivity:Activity(){  privatevartouchEvent:MotionEvent?=null  overridefundispatchTouchEvent(event:MotionEvent?):Boolean{if(event?.action==MotionEvent.ACTION_DOWN){  //重点1:重写Activity的dispatchTouchEvent方法,保存一下按下的event。touchEvent=event}returnsuper.dispatchTouchEvent(event)}  privatefunshowPopupWindow(){  //重点2,将PopupWindow显示在window的decorView下,位置为按下的event的rawX和rawY的值。popupWindow.showAsDropDown(window.decorView,touchEvent?.rawX?.toInt()?:0,touchEvent?.rawY?.toInt()?:0)     //重点3:今天...

Android开发Kotlin检查lateinit变量是否已初始化的方法

classFoo{lateinitvarlateInitVar:StringfuncheckInit(){if(this::lateInitVar.isInitialized){  //重要,this::前缀是必须的。    //如果已经初始化了,返回true      }}} ...

Android开发开源一款结合databinding写的用于RecyclerView的简单高效MultiTypeAdapter

这是一个结合databinding写的用于RecyclerView的MultiTypeAdapter,写法和用法都非常简单高效,不需要再写ViewHolder了,不需要再写findViewById了,因为使用了databinding,真实项目使用的完整版,用上就会感受到其simplebutpowerful。github地址:https://github.com/yongfengnice/RecyclerViewAdapter ...

Android开发databinding和RecyclerView.ViewHolder的完美结合

通用ViewHolder代码如下,就一个ViewHolder。。。从此不在是每个RecyclerView的Adapter编写一个ViewHolder了classViewHolder<T:ViewDataBinding>(itemView:View):RecyclerView.ViewHolder(itemView){valbinding=DataBindingUtil.bind<T>(itemView)!!}gradle文件开启databindingandroid{dataBinding{enabledtrue}}布局文件R.layout.e_item_message根元素以<layout></layout>开头,如下:<?xmlversion="1.0"encoding="utf-8"?><layoutxmlns:android="http://schemas.android.com/apk/res/android"><data></data><LinearLayoutandroid...

Android开发华为手机不弹出Toast,报HwRTBlurUtils: check blur style for HwToast-Toast...的原因

华为手机不弹出Toast,log报的信息:HwRTBlurUtils:checkblurstyleforHwToast-Toast,themeResId:0x7f0c0005,context: 。。。我的原因是:重写了getResources方法时调用了setToDefaults()方法导致的。overridefungetResources():Resources{valresources=super.getResources()valconfig=resources.configuration//config.setToDefaults()  //原因就是调用了这行代码。。。config.fontScale=1.0fresources.updateConfiguration(config,resources.displayMetrics)returnresources} ...

android开发Toolbar标题居中显示的解决方法

网上的一大堆,都是有问题不完整的,互相copy。。。记录一下自己的解决方法。<android.support.v7.widget.Toolbarandroid:id="@+id/tool_bar"android:layout_width="match_parent"android:layout_height="wrap_content"app:titleMargin="0dp"  app:contentInsetEnd="0dp"  //重要app:contentInsetStart="0dp"  //重要app:navigationIcon="@drawable/ic_launcher"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"  //重要android:textSize="20sp"android:singleLine="true"android:textColor="@android...

微信小程序开发 [07] 写在后面的话

写在后面的话基本算是吐槽了,在学完小程序的课程之后,我用博客园的api,写了个闪存的小程序,本来兴致勃勃甚至这篇是准备写“我的第一个小程序发布啦”,然而并没有。不是说我偷懒了没写,又或者个人拖延的原因,而是因为: 我一个个人开发者哪来什么企业主体的小程序号啊,于是可以说这个小程序算是暂时死掉了,只能期待将来UCG类目对个人开放时,再将它上架。在这期间还是花了不少时间去鼓捣的,OAuth2的授权,界面的参考和设计,CSS学习和应用,找公共图床,和某个大佬的客户端闪存格式兼容等,所以即使小程序没办法上架,也不算是毫无收获吧。丢一些图做个纪念,下一个小程序的内容已经想好了,抽时间就开始做啦,吸取教训才能更好,我安慰自己说...           ...

微信程序开发 [06] 一些补充的知识点

之前在讲到模板部分的时候,模板引入了,实际上模板对应的wxss也是可以独立开进行单独引入的。使用 @import 语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束,如下例:/**common.wxss**/.small-p{padding:5px;}4 1/**common.wxss**/2.small-p{3 padding:5px;4}/**app.wxss**/@import"common.wxss";.middle-p{padding:15px;} 1/**app.wxss**/2@import"common.wxss";3.middle-p{4 padding:15px;5}filters主要运动在图片上以实现特效,如模糊则为 -webkit-filter:blur(20px)...

微信程序开发 [05] wx.request发送请求和妹纸图

微信小程序中用于发起网络请求的API就是wx.request了,具体的参数太多,此处就不再一一详举了,基本使用示例如下:wx.request({url:'test.php',//仅为示例,并非真实的接口地址method:"POST",data:{param1:'',param2:''},header:{'content-type':'application/json'//默认值},success:function(res){console.log(res.data)}})14 1wx.request({2url:'test.php',//仅为示例,并非真实的接口地址3method:"POST",4data:{5param1:'',6param2:''7},8header:{9'content-type':'application/json'//默认值10},11success:function(res){12console.log(res.data)13}14})值得注意的有如下几点:希望在获取数据之后进行的操作,切记一定要写在success回调中,因为wx.request是...

微信程序开发 [04] 模板和模块化

如果相同的wxml代码可能在不同的页面重复使用,ctrl+c配合ctrl+v的方式,后期维护起来未免也太麻烦了。微信提供了“模板”,可以在模板中定义代码片段,然后在不同的地方调用。使用<template>对代码进行模板定义,并使用name属性为模板进行命名,如:<templatename="msgItem"><view><text>{{index}}:{{msg}}</text><text>Time:{{time}}</text></view></template>6 1<templatename="msgItem">2 <view>3  <text>{{index}}:{{msg}}</text>4  <text>Time:{{time}}</text>5 </view>6</template>而在需要使用模板的地...

微信程序开发 [03] 事件、数据绑定和传递

微信小程序中,事件的绑定依附于组件,当事件触发时,就会执行事件对应的处理函数。我们回到前几章中的例子,将index页面调整为首页(app.json中调整pages数组元素的顺序),此时我们希望,点击页面中的“HelloWorld”字样,能够跳转到我们之前写的Welcome页面中去:首先来说明一下事件的绑定形式:事件绑定依附于组件,所以其绑定的写法和组件的属性写法是类似的,以key、value形式key以bind或catch开头并跟上事件类型,如bindtap、catchtap,也可以使用冒号如bind:tap、catch:tapvalue是一个字符串,对应Page中同名的函数原来的wxml中HelloWorld对应的组件代码为:<viewclass="usermotto"><textclass="user-motto">{{motto}}</text></view>3 1<viewclass="usermotto">2  <textclass="user-motto">{{motto...

微信程序开发 [02] 页面注册和基本组件

对于小程序中的wxss布局方式,不推荐使用诸如position,float之类的属性,而是采用flex布局,灵活快捷自适应,关键是自适应!此处另起标题也是为了表达我对其强烈的推荐,因为我这个后端都能用flex很好的布局,可见其简单快捷性!强烈推荐阮一峰老师的两篇博文:Flex布局教程:语法篇Flex布局教程:实例篇...

微信程序开发 [01] 小程序基本结构和官方IDE简介

如上图,整个IDE分为四个部分:中间的文件目录树模拟器(左侧)编辑器(右上)调试器(右下) 其中调试器是不是很熟悉?没错,和你用的chrome开发者工具一模一样,稍微有点要提醒的是:.js类型的文件,在Sources中都有两个,其中xx.js是编译后的,xx.js?[sm]才是和我们实际文件相同,调试时使用xx.js?[sm] Storage可以看到当前小程序的缓存内容 AppData可以查看当前程序中的数据信息 最后,模拟器的预览和执行必须在编译后,所以每当你代码进行了更新,先点击一下”编译“,效果才会是最新的。 ...
首页上一页...89101112...下一页尾页