程序员自我救赎

记录程序员救赎之道

  1. 编辑 /tmp/dhcp.leases 文件,删除想清理的IP地址/MAC地址那一行
  2. 重启dnsmasq:
    1
    /etc/init.d/dnsmasq restart

Amlogic系列盒子彻底解决key丢失问题

1
2
3
4
5
6
7
adb shell
cd /sys/class/unifykeys/
cat list //查看支持的更改数据
echo mac > name //敲入>name命令选择需要修改的key
echo AA:BB:CC:DD:EE:FF > write //敲入>wirte命令修改指定的mac地址
cat read //查看写入的数据

欢迎来到我的学习记录网站。
我是程序员阿峰,欢迎关注我。记得点赞哦。

Hello ,好久不见。
疯狂的TextView前缀。不知道是否遇到过这种设计图:

这也有:

新设计图又有:

看到没,金额那都有¥的符号。
不知道你在叠TextView的时候会不会疯,我反正不爽,直接自定义。
自定义的方案有两种:
1、继承ViewGroup,创建两个TextView,然后在各种onMeasure,onLayout。
嗯。可以实现,但是呢ViewGroup的存在嵌套了一层,性能肯定不是最好的啊(当然这点小性能微乎其微,CPU都不会颤抖一下)。所以使用第二种吧。

2、那就是直接继承TextView,人民币符号就在onDraw中画一个呗。

1、继承TextView

1
2
3
4
5
6
7
8
class MoneyView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TextView(context, attrs, defStyleAttr){
private val paint = Paint()
private val text = "¥"
private val rect = Rect()

}

2、初始化方法

1
2
3
4
5
6
7
8
init {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MoneyView)
paint.textSize = typedArray.getDimension(R.styleable.MoneyView_money_size, 36f)//设置字符的大小
paint.color = typedArray.getColor(R.styleable.MoneyView_money_color, Color.WHITE)//设置字符的颜色
typedArray.recycle()
paint.isAntiAlias = true
paint.getTextBounds(text, 0, 1, rect)//获取字符的大小
}

3、设置TextView的最终大小

1
2
3
4
5
6
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val w = MeasureSpec.getSize(widthMeasureSpec)
val h = MeasureSpec.getSize(heightMeasureSpec)
setMeasuredDimension(measuredWidth + rect.width(), measuredHeight)
}

4、把人民币符号画在金额前边

1
2
3
4
5
6
override fun onDraw(canvas: Canvas?) {
canvas?.drawText(text, 0f, (baseline).toFloat(), paint)//先画人民币符号
canvas?.withTranslation(rect.width().toFloat(), 0f) {//画布右移一个人民币符号宽度
super.onDraw(canvas)//画该有的文本
}
}
哇,竟然这么简单。你学会了吗?

当然,你可以把前缀后缀统统传进来。

设计一个关系型数据库很重要的一部分是将数据拆分成具有相关关系的数据表,然后将数据以符合这种关系的逻辑方式整合到一起。从 Room 2.2 的稳定版开始,我们可利用一个 @Relation 注解来支持表之间所有可能出现的关系: 一对一、一对多和多对多。

1
2
3
4
5
6
7
Room 2.2

https://developer.android.google.cn/jetpack/androidx/releases/room#version_220_3

@Relation

https://developer.android.google.cn/reference/android/arch/persistence/room/Relation

一对一关系

Markdown

阅读全文 »

该文档由作者自己的理解翻译,若有出入,敬请谅解。

Kotlin协程的基本用法

这一篇我们学习协同程序的基本概念。查看原文

你的第一个协同程序

复制下面的代码到你的程序中并运行:

1
2
3
4
5
6
7
8
9
10
import kotlinx.coroutines.*

fun main() {
GlobalScope.launch { // 启动一个新的后台协同程序,并继续
delay(1000L) // 非阻塞的延时1秒(默认时间单位是毫秒)
println("World!") // 延时结束打印
}
println("Hello,") // 协同程序结束延时后,主线程继续执行
Thread.sleep(2000L) // 阻塞主线程2秒用来保持虚拟机运行中
}

查看全部代码

你将看到如下结果:

阅读全文 »

该文档由作者自己的理解翻译,若有出入,敬请谅解。

Kotlin协程简介

Kotlin作为一种语言,仅仅需要提供最小等级API的标准库用于其他不同库去使用的协同程序。类似的功能(协程)不同于其他的一些语言,async 和 await不是Kotlin的关键字,也不是标准库的一部分。而且,Kotlin的挂起方法的概念是一种对于异步的操作比期望的更加安全和发生更少的错误。

Kotlin的协同程序是由JetBrains为协同程序而开发的功能丰富的库。它包括一些高水平可协同的操作符,例如,launch,async 等等。

本文档主要包含核心工功能的一系列kotlin协程的举例,被分成若干个部分进行阐述。

为了更好的使用本文档中协程的举例,你需要先添加kotlin协程核心库依赖,可参考项目中的README。

阅读全文 »

Android 屏幕适配是Android工程师最最头疼的一件事情了。最近公司的项目中就需要引入屏幕适配的工作,但是,UI及尺寸是基于iPhone6的,那么如何做到显示效果上能够更加的接近设计图呢?

下面我将在最小限度的不更改源代码的情况下,使用屏幕分辨率限定符的形式进行Android屏幕的适配方式的介绍

一、 将iPhone6的尺寸与Android sw360dp 进行换算

通常我们需要UI设计基于1920*1080的设计稿,宽度为360dp,将切图的三倍图放置xxhdpi,如果标注是px,那么我们自动除以3作为dp,如果直接是dp那我们直接拿来使用。

手机 屏幕分辨率 宽度DP(heightPixels/density)
iPhone6 1334*750 375pt
小米6 1920*1080 360dp
华为荣耀8X 2045*1080 360dp
锤子坚果Pro2 2070*1080 432dp
阅读全文 »

今天是2019年1月9号,新的一年已经到来,今天才腾出时间来总结已经过去的2018。

2018.2.23 结婚啦。
2018.9.17 换新工作啦,搜狗大佬们的创业公司。
2018.10.28 期待的猪宝宝。

2018
在美灿,完成IOS的独立开发及上传AppStore实践,完成Python的初步学习,基于python独立开发后台小项目,Android方面全面转向Kotlin语言的开发,So fast,I like it.
在葡萄智学,火力全开投入到新项目的开发上。经历了三个星期的开发,第一版项目内部上线,在经过一个月的维护后,官网各大应用商店上线,又一个月重构了一部分java代码专向kotlin,保持代码的稳定统一,终于在年末项目稳定下来,各大应用商店上线。接下来的2019年,工作中心偏向程序内部功能的编写及调整。

2019
今年应该是一个平淡而又幸福的一年。
我将持续在Android领域接触更多的知识,把新技术运用到公司的项目中来。
迎接小baby。
完成北大的答辩和课程。

在安装界面点击打开,讲app切到后台再切回前台后,重新进入欢迎页。

在欢迎页或启动页onCreate后添加判断

1
2
3
4
5
6

if (intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {
finish()
return
}


李利锋@limxing
2018-11-27

0%