https://gravatar.cat.net/avatar/08cf681fb7c6ad1b4fe70a8269c2103c?s=96&d=mp&r=g

LengYue's Blog

0.0

给LengYue's Blog打分

start start start start start

感谢您打了2

详情

全站展示位

使用EditText的TextChangedListener时StackOverflowError异常 |

在工作过程中,各种文本框的输入有各种特殊需求,如输入整数、字母等等需求。现公司业务需求,要求某文本输入框,只能输入整数,并且不能出现以“010”,数字出现以0开头的情形。 经过查询文档,发现EditText可以通过addTextChangedListener方法,添加文本变化的监听器。我们可以通过该监听器对以0开头的情形进行处理。。。。

推荐

Android清除本地数据缓存代码 |

/* 文 件 名: DataCleanManager.java 描 述: 主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清 除自定义目录 */

在AndroidManifest.xml文件中的android:windowSoftInputMode属性使用| keyboard,squeezing,layout |

The AndroidManifest.xml File <activity android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] …… > </activity>

搭建为知笔记Docker版,以及注意事项 |

好久没有关注为知笔记了,最近考虑迁移笔记的时候,看了一下各大笔记应用,开源笔记要么不支持全平台,要么客户端完善度或者同步问题不行。突然发现为知笔记支持docker版,可以自己部署,客户端还是使用官方客户端。 安装docker docker version > /dev/null || curl -fsSL get.docker.com | bash service docker restart 启动为知笔记docker 创建文件夹,跟官方保持一致,我们也在主目录创建文件 cd ~ mkdir wizdata 启动,如果你打算使用nginx,或者配置ssl,则需要把端口调整一下。比如我的6789 docker run --name wiz --restart=always -it -d -v ~/wizdata:/wiz/storage -v /etc/localtime:/etc/localtime -p 80:80 -p 9269:9269/udp wiznote/wizserver 接下来会自动下载并运行,喝杯咖啡,等一下就可以了。 或者,可以在这个时候配置Nginx 配置Nginx 开启SSL ssl_certificate XXX/fullchain.pem; #你的证书地址 ssl_certificate_key XXX/privkey.pem; #你的证书地址 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!EXP; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 配置云存储 默认笔记是保存在本地的,你可以使用本地+云同步的方式,或者像我一样直接使用云储存, 配置阿里OSS

IOS的专利?Android也能流畅实现毛玻璃效果效果 |

背景介绍 上图就是我们在IOS设备上经常能够见到的毛玻璃(高斯模糊)效果。不得不说,这种效果在适合的场景下使用,能够获得绝佳的美感。但是鉴于Android设备性能和兼容性问题,我们通常很难在Android设备上见到这种效果。 但这并不是IOS的专利效果,Android也能轻松流畅的实现。本篇文章将会详细的讲解如何实现。 Android中的高斯模糊 我为什么选择RenderScript实现高斯模糊 目前Android设备上实现高斯模糊效果的方式通常有: 云端处理,移动客户端直接从网络获取处理好的图片。这种方式局限性很大。 FastBlur等开源库。这种方式兼容性不错,但是效率极低。 c实现。不懂c的理解困难。 OpenGL实现。效果很好,但电量和内存消耗比较高。 RenderScript实现。效果略弱于第4种,但是使用方便,速度很快,性能消耗在可接受范围内,加上Google的兼容性解决方案,可以说是能够作为优先考虑的方式。 RenderScript RenderScript主要在android中的对图形进行处理,RenderScript采用C99语法进行编写,主要优势在于性能较高。在Api11的时候被加入到Android中。同时,Google提供了android.support.v8.renderscript兼容包,能够实现更低版本的兼容。 RenderScript提供了一个用于实现高斯模糊的封装类ScriptIntrinsicBlur ,这货在Api17才被收编Android所以在不使用兼容包的情况下只能兼容到4.2的设备。但是,我们有兼容包啊向下兼容不是梦。 准备阶段 ###引入兼容包 方法很简单,只需在build.gradle中加入: defaultConfig { 。 。 。 //就是这么简单 renderscriptTargetApi 19 renderscriptSupportModeEnabled true } 你以为这样就好了?nonono。 由于一些坑人的厂商会深度定制Android系统,所以一些必要的依赖文件会被它们直接去掉!!这导致一些型号的设备上调用RenderScriptd的部分方法时会报错。所以我们得加上这些可能丢失的文件。 其实也简单,打开android_sdk/build-tools/选择19以上版本/renderscript/lib/packaged我们可以看见3个包含.os文件的文件夹。 直接复制这三个文件加到项目工程的jniLibs 包下。什么?找不见jniLibs包?自己建一个喽。 注意,这时候,我们很可能遇到一个崩溃,找不到.os文件。莫慌莫慌… 在build.gradle的android{}中加入: sourceSets { main { jniLibs.srcDirs = ['libs'] } } 没完没了!最后一步只针对使用的混淆的同学,需要在混淆中加入: -keep class android.support.v8.renderscript.** { *; } 实现高斯模糊 终于可以开始写代码了。先来看看效果。下图高斯模糊半径逐渐增大的效果,请忽略渣渣录屏效果 将ScriptIntrinsicBlur封装成工具类。咱们代码里接着款 import android.support.v8.renderscript.*; //这句很重要啊,v8包的,不然不能向下兼容啊。 public class RenderScriptGaussianBlur { private RenderScript rs; public RenderScriptGaussianBlur(Context context) { // 创建RenderScript内核对象 this.

心灵鸡汤

家有高考生

文/钟芳

儿子是今年高考大军中的一员。为引导儿子顺利度过人生的关键期,以健康的身体、愉快的心情参加高考,我特向单位请了年休假,专门在家做好他的“后勤部长”,陪他一起备战高考。

每天早上6点,我就起床开始了一天的忙碌。一日之计在于晨,早餐关键是营养丰富、热量充足。儿子平时爱吃的早餐是馄饨鸡蛋粉丝,把水烧开,打入鸡蛋,鸡蛋凝固成型后,下馄饨入锅,馄饨漂浮后,加进粉丝、青菜,待开锅沸腾后,撒上葱花、香菜、生抽、食盐调味后,一碗美味可口营养全面的馄饨鸡蛋粉丝出炉了。去上学时,我还给他带上一块巧克力或两块饼干和一瓶酸奶,在上午10点钟下课时吃,补充体力。

除了强壮的身体,保持乐观的心态也是必需的。晚饭后,我们一家三口一起去外面散散步,打打羽毛球,相互沟通,让儿子把压力和苦恼说出来,但为了不给儿子增加压力,很少提及考试和学习。

有一次,儿子模拟考试没考好,回家后脸色一直不好。于是晚饭时我故意和他找话说,还特地讲了一个笑话。儿子笑过之后,对我和老公说:“爸爸妈妈,这月模拟考试没考好,如果我高考也像这次月考一样发挥失常,连二本都考不上,那怎么办啊?我会觉得对不起你们的。”

这时,老公附和说:“是啊,这次成绩好像不太理想啊。但没事,一次小考算什么呀!”我也故作轻松地说:“孩子,一切只要尽心尽力,就无怨无悔。现在你只要放下‘怕考砸’的心理包袱,以正常水平发挥,就一定能够考出理想的成绩来。再退一步说,就是高考没考上也没关系,你仍是爸妈的骄傲。爸妈想让你考上大学,但更希望你平安快乐。”

儿子终于很开心地笑了,笑得灿烂阳光。第二天放学回家后,儿子自信地对我和老公说:“高考并不可怕,用平常心对待,我有信心面对高考。”

列表展示

主站展示位

软件开发 |

琥珀之月,空谷之兰,皆是孤芳,既是孤芳,但求自赏便罢!

RecyclerView里notifyItemRemoved的坑 |

RecyclerView很多时候是展示静态的数据,并不会有删除的操作,讲到RecyclerView时,会提到它提供了一个很好的展现删除操作动画的函数,代码片段一般是这样的 @Override public void onBindViewHolder(final CommonViewHolder holder, final int position) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { contentList.remove(position); notifyItemRemoved(position); } }); } 这样写的话,很快会产生数据删除错乱和超出索引异常导致崩溃。 原因是函数里面的传入的参数position,它是在进行onBind操作时确定的,在删除单项后,已经出现在画面里的项不会再有调用onBind机会,这样它保留的position一直是未进行删除操作前的postion值。 对于尚未进入画面的单项来说,它会使用新的position值,这个值是正确的,如果在单项里加上下面的代码 holder.textView.setText(contentList.get(position) + "#" + String.valueOf(position)); 在删除第一屏的一项后,向上滚动,会发现新滚上来的一行和它上面的一行的textview显示是一样的。 解决办法也很简单 先remove,再notifyItemRemoved, 最后再notifyItemRangeChanged remove:把数据从list中remove掉, notifyItemRemoved:显示动画效果 notifyItemRangeChanged:对于被删掉的位置及其后range大小范围内的view进行重新onBindViewHolder

【MongoDB for Java】Java操作MongoDB |

一、准备工作 1、 首先,下载mongoDB对Java支持的驱动包 驱动包下载地址: mongoDB对Java的相关支持、技术: 驱动源码下载: 在线查看源码:

unable to connect to 5555: connection refused |

I had the same issue since the android 6 upgrading. I noticed that for some reason the device is playing “hard to get” when you try to contact it over WIFI. Try these following steps: Make sure that Aggressive Wi-Fi to Cellular handover under Networking section in the device’s developer options is turned off. ping continuously from your pc to the device to make sure it’s not in network idle mode ping -t 192.

Flutter中嵌入Native组件 |

Flutter官方提供的控件AndroidView、UiKitView就是一种比较优雅的解决方案了。这里做了一个简单的嵌入TextView的demo(使用这种方式会增加性能上的开销,应该尽量避免使用) 使用方式 native端 跟MethodChannel的使用方法类似,在native侧,我们实现一个PlatformViewFactory(iOS是FlutterPlatformViewFactory),在create方法中,使用平台方法创建View返回。 override fun create(context: Context?, i: Int, any: Any?): PlatformView { return object : PlatformView { override fun getView(): View { val text = TextView(context) text.layoutParams = ViewGroup.LayoutParams(SizeUtils.dp2px(200f), SizeUtils.dp2px(200f)) text.apply { setText("Android View") setTextColor(Color.BLUE) setBackgroundColor(Color.RED) } return text } override fun dispose() { } } } func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?

利用Android源码,轻松实现汉字转拼音功能 |

今天和大家分享一个从Android系统源代码提取出来的汉字转成拼音实现方案,只要一个类,560多行代码就可以让你轻松实现汉字转成拼音的功能,且无需其他任何第三方依赖。

Android ListView 与 RecyclerView 对比浅析—缓存机制 |

一,背景 RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的ListView,更加强大和灵活。 最近,自己负责的业务,也遇到这样的一个问题,关于是否要将ListView替换为RecyclerView? 秉承着实事求是的作风,弄清楚RecyclerView是否有足够的吸引力替换掉ListView,我从性能这一角度出发,研究RecyclerView和ListView二者的缓存机制,并得到了一些较有益的”结论”,待我慢慢道来。 同时也希望能通过本文,让大家快速了解RecyclerView与ListView在缓存机制上的一些区别,在使用上也更加得心应手吧。 PS:相关知识: ListView与RecyclerView缓存机制原理大致相似,如下图所示: 过程中,离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取,只是ListView与RecyclerView的实现细节有差异.(这只是缓存使用的其中一个场景,还有如刷新等) PPS:本文不贴出详细代码,结合源码食用更佳! 二. 正文 2.1 缓存机制对比 层级不同: RecyclerView比ListView多两级缓存,支持多个离ItemView缓存,支持开发者自定义缓存处理逻辑,支持所有RecyclerView共用同一个RecyclerViewPool(缓存池)。 具体来说: ListView(两级缓存): RecyclerView(四级缓存): ListView和RecyclerView缓存机制基本一致: 1). mActiveViews和mAttachedScrap功能相似,意义在于快速重用屏幕上可见的列表项ItemView,而不需要重新createView和bindView; 2). mScrapView和mCachedViews + mReyclerViewPool功能相似,意义在于缓存离开屏幕的ItemView,目的是让即将进入屏幕的ItemView重用. 3). RecyclerView的优势在于a.mCacheViews的使用,可以做到屏幕外的列表项ItemView进入屏幕内时也无须bindView快速重用;b.mRecyclerPool可以供多个RecyclerView共同使用,在特定场景下,如viewpaper+多个列表页下有优势.客观来说,RecyclerView在特定场景下对ListView的缓存机制做了补强和完善。 缓存不同: 1). RecyclerView缓存RecyclerView.ViewHolder,抽象可理解为: View + ViewHolder(避免每次createView时调用findViewById) + flag(标识状态); 2). ListView缓存View。 缓存不同,二者在缓存的使用上也略有差别,具体来说: ListView获取缓存的流程: RecyclerView获取缓存的流程: 1). RecyclerView中mCacheViews(屏幕外)获取缓存时,是通过匹配pos获取目标位置的缓存,这样做的好处是,当数据源数据不变的情况下,无须重新bindView: 而同样是离屏缓存,ListView从mScrapViews根据pos获取相应的缓存,但是并没有直接使用,而是重新getView(即必定会重新bindView),相关代码如下: //AbsListView源码:line2345 //通过匹配pos从mScrapView中获取缓存 final View scrapView = mRecycler.getScrapView(position); //无论是否成功都直接调用getView,导致必定会调用createView final View child = mAdapter.getView(position, scrapView, this); if (scrapView != null) { if (child != scrapView) { mRecycler.

android根据银行卡卡号判断银行 |

根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号。 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表。通过二分查找的方法,找到bin号在有序表的位置,然后读出银行卡的信息。

不使用第三方软件实现Obsidian多平台实时同步 |

这篇文章涉及服务器配置、docker 技术,当然都是很初级的使用 相信很多人跟我一样,不喜欢使用第三方软件来同步 Obsidian 。每次要打开两个软件,很麻烦。这种情况在手机上最为明显。 这也是我为什么从 9 月多就接触了 Obsidian 但是一没有最为主力的原因。虽然印象笔记已经非常的不好用,但是他的同步真的非常的方便。 直到最近在翻看 Obsidian 的插件的时候接触到了这个插件 Self-hosted LiveSync(虽然也有一款支持 WebDav 的插件,但是试了一下连不上服务器,作者说目前 WebDav 还在测试中)这个插件真的非常的棒 👍🏻。实现了无感同步,甚至可以多平台实时同步。 引用一张作者的图: 搭建服务器端 Self-hosted LiveSync 使用的是CouchDB数据库,这是一个开源的具有版本控制的文档数据库。 你可使用 IBM 提供的 CouchDB 数据库,这里有作者写的教程 我们这里还是直接自己搭建,我是在家里的群辉 NAS 上搭建的,如果你没有 NAS 也可以在腾讯云、阿里云等云服务上搭建。优先推荐在 NAS 上搭建。 安装 docker 群辉直接再套件商店安装。云服务器用户使用下面的命令 docker version > /dev/null || curl -fsSL get.docker.com | bash service docker restart 安装数据库 首先创建配置文件 local.ini [couchdb] single_node=true [c

Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存? |

!!! 原文出处:  0、写在前面本文涉及到屏幕密度的讨论,这里先要搞清楚 DisplayMetrics 的两个变量,摘录官方文档的解释: density:The logical density of the display. This is a scaling factor for the Density Independent Pixel unit, where one DIP is one pixel on an approximately 160 dpi screen (for example a 240x320, 1.5”x2” screen), providing the baseline of the system’s display. Thus on a 160dpi screen this density value will be 1; on a 120 dpi screen it would be .75; etc. This value does not exactly follow the real screen size (as given by xdpi and ydpi, but rather is used to scale the size of the overall UI in steps based on gross changes in the display dpi.

FastJson简单使用 |

在工作中,经常客服端需要和服务端进行通信,目前很多项目都采用JSON的方式进行数据传输,简单的参数可以通过手动拼接JSON字符串,但如果请求的参数过多,采用手动拼接JSON字符串,出错率就非常大了。并且工作效率也特别低。 我在网上看了一些开源的JSON框架,比如Google提供的Gson,Jackson,FastJson等框架。 经过测试,个人觉得FastJson执行效率比较高,而且简单易用。 FastJson不依赖于第三方包, 直接可以运行在Java JDK1.5之上,FastJson完全支持 一个JSON库涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化。使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。 简单的序列化 pubic class UserInfo implements Serializable{ private String name; private int age; public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.age=age; } public int getAge(){ return age; } } public class TestOne{ public static void main(String[] args){ UserInfo info=new UserInfo(); info.

Sophie’s World |

生命本没有意义,你要能给他什么意义,他就有什么意义。与其终日冥思苦想人生有何意义,不如试用此生做点有意义的事。 ——苏菲某天放学回家,收到了神秘的一封信。 ——你是谁? ——世界从何而来?  从此,她的生活彻底改变,在一位神奇的哲学老师艾伯特的指引下,她开始思索,从苏格拉底到柏拉图,从黑格尔到马克思,从文艺复兴到浪漫主义,各位大师所思考 的根本问题。与此同时,苏菲不断收到一个自称是少校的人的神秘信件,,并托她转达给一个叫席德的人。可苏菲并不认识这个叫席德的人。世界像谜团一样展现在 苏菲眼前,她运用少女天生的悟性与后天的知识,企图解开这些谜团,然而,事实真相远比她所想的更离奇,更怪异……在艾伯特的指引下,他们发现自己仅仅是少 校写的一本为自己女儿席德生日而送的书中的人物,他们所做的一切,包括思考的一切都被少校用笔写了下来,他们不过是少校大脑中的一丝电磁波罢了。换句话 说,苏菲和艾伯特,以及他们那个世界中的一切,全部都是不存在的,是虚无的!可就是这样一个虚构的人物,竟然也有自己的思想,他们企图脱离书本,不再受少 校的摆控。终于,在席德将苏菲的故事看到最后一页时,他们成功的逃离了书本,来到了一个叫永恒之乡的世界。这是一个与现实世界相对位的地方,这个世界的人 都拥有永恒的生命。他们可以看到听到现实世界的一切,但现实世界的人却永远也无法感受到他们的存在。永恒之乡的人都是像苏菲和艾伯特一样,是从某个虚构的 股市中跑出来的人物。此时少校和席德正在草地上仰望星空,谈人生,谈宇宙,而苏菲正在某个角落默默地注视着他们……  这个故事看似匪夷所 思,实则发人深省,看完后我们不禁要问——人生的意义是什么?在苏菲的世界中,他们的一切都是虚无的,不存在的。他们所有的思想动作以及所发生的一切事 情,都是少校所安排好的,少校在那个世界中无所不能,仿佛就是他们的上帝一样。因为少校就是创造他们世界的人。可事实上,少校和席德不也是虚构的人物吗? 他们所做的一切不都是作者乔斯坦·贾德所安排好的吗?我们所看到的席德,就像席德看到的苏菲一样,而贾德,就是席德他们那个世界的上帝吧?再放眼我们现在 所处的这个世界,这应该是相对于我们的“现实世界”吧?那是不是存在这样一个“上帝”,我们的所作所思,都是这位上帝所安排好了的呢?那这样我们的存在岂 不是毫无意义的吗?那这位上帝之上,是否还有一位上帝呢……  其实,每个人都是一个思维的个体,而相对于我们而言,自己的命运是要靠自己把 握的。尽管我们的未来可能就像戏剧一样早已被上帝写进了剧本,可是只要我们认为自己是存在的,不就足够了吗?正如苏菲和艾伯特将要离开他们那个世界时一 样,艾伯特对大家说;“在座的没有一个人会想念我们,因为你们根本就不存在,你们无法用任何器官来想念我们。”当即立刻有人反驳道:“你凭什么说我们不存 在?我努力赚钱,养活我的家人,过上幸福的生活,我很快乐!可你到头来却说我不存在?”的确,按理说他只是虚构的,的确是不存在,可如果映射到我们这个世 界,岂不是同样没有人存在?引入一个概念前必先引入其相反的一个概念,既然一切都“不存在”,那又何来“存在”的概念呢?所以,或许我们不存在,可那只是 相对上帝而言的,我们只须抓住这如星尘般稍纵即逝的瞬间,以自己的方式,度过人生,那就足够了。或许每当天空中有星尘散落时,那一定是某个小说中的人物从 他那所谓不存在的世界中脱离出来了,他会在某个角落,默默地注视着我们…… 人生如梦。 梦即现实。

Android声明式UI框架 Litho 初探 ——两种数据类型 |

Litho中包含的的两种数据类型 Litho的两种属性分别是: 不可变属性称为Props 可变属性称为State 不可变属性Props 定义和使用props Props属性:Component中使用@Prop注解的参数集合,具有单向性和不可变性,可以在左右的方法中访问它的指。在同一个Component中我们可以定义和访问相同的prop 下面这个例子,定义了两个Prop,一个string类型text,一个int类型index,text的注解中optional = true表示它是一个可选参数。 当Component的生命周期方法被调用的时候,@Prop参数会保存component创建时从它们的父级传递过来的值(或者它们的默认值) 设置props prop参数其实在前几篇文章中都有使用过,用起来也没有什么特别的地方,这里不在赘述,制作一个简单的说明。 Component中的prop参数会在编译时候自动加入到Builder中,以上面的代码举例: PropComponent.create(c).index(10)./*text("测试文本").*/build() Prop的默认值 对于可选的Prop如果不设置值,就是java的默认值。或者你也可以使用@PropDefault注解然后添加默认值。 如果你使用Kotlin,那还需要加上@JvmFiel把该字段编辑为public才行。 @MountSpec object PropComponentSpec { @JvmField @PropDefault val prop1 = "default" @JvmField @PropDefault val prop2 = -1 资源类型 在Android开发中,我们经常会限定参数的类型。比如: fun doSomething(@ColorInt color: Int, @StringRes str: Int, @DimenRes width: Int){} 在Compontent的Prop中也有类似的操作,具体看代码: fun onMount( c: ComponentContext, textView: TextView, @Prop(optional = true,resType = ResType.STRING) text: String?

Don’t Store Data in the Application Object |

There is always some information that is needed in many places in your app. It can be a session token, the result of an expensive computation, etc. It is often tempting to avoid the overhead of passing objects between activities or keeping those in persistent storage. A pattern that is sometimes suggested is to dump your data in the Application object with the idea that it will be available across all activities.

Android调用手机中的应用市场 |

public static void goToMarket(Context context, String packageName) { Uri uri = Uri.parse("market://details?id=" + packageName); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); try { context.startActivity(goToMarket); } catch (ActivityNotFoundException e) { e.printStackTrace(); } }

清除目录下的SVN信息 |

在项目开发和日常文档管理时,用到了SVN,由于要把一些文档发给同事,这时想删除SVN版本信息文件,于是上网在SVN中文论坛找到了一份资料: 删除 .svn 文件 在linux下 删除这些目录是很简单的,命令如下 find . -type d -name “.svn”|xargs rm -rf 或者 find . -type d -iname “.svn” -exec rm -rf {} ; 在windows下用以下法子: 1、在项目平级的目录,执行dos命令: xcopy project_dir project_dir_1 /s /i project_dir 为你的项目目录 原理是复制可见文件 .svn是隐藏目录 不会复制 3、添加注册表(亲自动手测试过) 可以将“快速删除SVN版本信息”命名增加到资源管理器的右键上,这样,鼠标点两下就能把选中目录下的所有.svn目录干掉了。 代码为: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellDeleteSVN] @=”快速删除SVN版本信息” [HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellDeleteSVNcommand] @=”cmd.exe /c D:工具批处理文件删除SVN版本信息.bat” 将这段代码保存为一个.reg文件,双击确认导入注册表中不完整,后来自己手工添加。注意:文件“批处理文件删除SVN版本信息.bat”不能放 在有空格的文件夹下,确认删除时请看一下当前目录不要删除不该删的目录下的SVN版本信息。不知道怎么改进“cmd.exe /c D:工具批处理文件删除SVN版本信息.bat”。 批处理文件删除SVN版本信息.bat文件内容如下: @echo off echo *********************************************************** echo 清除SVN版本信 息 echo *********************************************************** :start ::启动过程,切换目录 :set pwd=%cd% :cd %1 echo 工作目录是:& chdir :input ::获取输入,根据输入进行处理 set source=: set /p source=确定要清楚当前目录下的.

解决 golang IDEA中不能debug问题 |

IDEA是2018-01版本,Golang是go-1.12.1,IDEA在Plugins中安裝的Go插件,我在运行go程序時是正常的,但是提示could not launch process: decoding dwarf section info at offset 0x0: too short 解決方案: 1:在终端运行 go get -u github.com/derekparker/delve/cmd/dlv。 2:运行上面的命令之后运行环境中就有dlv了。替换IDEA go 插件中的dlv macOS中的插件地址是:/Users/用户名 /Library/Application Support/IntelliJIdea2018.1/intellij-go/lib/dlv/mac 替换之后就正常了。

Android-使用@AutoService实现spi |

什么是 SPI? Java SPI 全称 Service Provider Interface,是 Java 提供的一套用来被第三方实现或者扩展的 API,它可以用来启用框架扩展和替换组件。实际上是“基于接口的编程 + 策略模式 + 配置文件”组合实现的动态加载机制. 具体解释就是: 定义一个接口文件 写出多个该接口文件的实现 在 src/main/resources/ 下建立 /META-INF/services 目录, 新增一个以接口命名的文件 , 内容是要接口的实现类全路径 使用 ServiceLoader 类 来获取到这些实现的接口 示例 定义一个接口文件 - Book package com.apkdv.spi_test; public interface Book { String name(); } 实现两个接口 package com.apkdv.spi_test; public class Android implements Book { @Override public String name() { return "Android"; } } package com.

Flutter和原生Android控件对比 |

Flutter和原生Android控件对比: Flutter控件 Android控件 AppBar ActionBar/ToolBar ListView ListView/RecyclerView Text TextView Center ViewGroup FloatingActionButton FloatingActionButton(design库里面的) BottomNavigationBar BottomNavigation(design库里面的) RaisedButton/Button Button Column LinearLayout的android:orientation=“vertical” Row android:orientation=“horizontal” DecorationImage ImageView Image ImageView Stack FrameLayout/RelativeLayout Container RelativeLayout CustomMultiChildLayout RelativeLayout Algin alginParentXXX属性 resizeToAvoidBottomPadding android:windowSoftInputMode=”adjustResize属性 SingleChildScrollView ScrollView CustomScrollerView Recyclerview Image里面的BoxFit参数介绍:(相当于Android的ImageView的scaleType参数)

博客寄语:

    从14年开始写博客,到现在再有2年就10年了。

实时播报:

博客号-学习成长

相信每一分耕耘都有每一分收获,致力帮助博客主所创作的博客能更快的被收录! 如果有其它需求,可联系下方邮箱。