Android Tips 6

介绍关于Android的一些有趣的小知识点. 本文是第六篇, 欢迎阅读.

更多: http://www.wangchenlong.org/
欢迎Follow我的GitHub: https://github.com/SpikeKing

Android

系列
第一篇, 第二篇, 第三篇, 第四篇, 第五篇, 第六篇.


控件位置

获取控件四个角的位置.

Android

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static PointF getTopLeftCorner(View view) {
float src[] = new float[8];
float[] dst = new float[]{0, 0, view.getWidth(), 0, 0, view.getHeight(), view.getWidth(), view.getHeight()};
view.getMatrix().mapPoints(src, dst);
PointF cornerPoint = new PointF(view.getX() + src[0], view.getY() + src[1]);
return cornerPoint;
}

public static PointF getTopRightCorner(View view) {
float src[] = new float[8];
float[] dst = new float[]{0, 0, view.getWidth(), 0, 0, view.getHeight(), view.getWidth(), view.getHeight()};
view.getMatrix().mapPoints(src, dst);
PointF cornerPoint = new PointF(view.getX() + src[2], view.getY() + src[3]);
return cornerPoint;
}

public static PointF getBottomLeftCorner(View view) {
float src[] = new float[8];
float[] dst = new float[]{0, 0, view.getWidth(), 0, 0, view.getHeight(), view.getWidth(), view.getHeight()};
view.getMatrix().mapPoints(src, dst);
PointF cornerPoint = new PointF(view.getX() + src[4], view.getY() + src[5]);
return cornerPoint;
}

public static PointF getBottomRightCorner(View view) {
float src[] = new float[8];
float[] dst = new float[]{0, 0, view.getWidth(), 0, 0, view.getHeight(), view.getWidth(), view.getHeight()};
view.getMatrix().mapPoints(src, dst);
PointF cornerPoint = new PointF(view.getX() + src[6], view.getY() + src[7]);
return cornerPoint;
}

异常Error:(216) Apostrophe not preceded by …

原因是字符串中包含单引号(), 导致, 添加转义符号即可.

1
<string name="hello_kotlin">Hello Kotlin, I\'m Spike! </string>

参考


Editable和String的转换

Editable是EditText使用的字符串格式. 与String可以相互转换.

1
2
Editable editable = new SpannableStringBuilder("Pass a string here");
String str = editable.toString();

参考


设置WRAP_CONTENT和VERTICAL

在Kotlin中, 使用属性扩展时, 需要记住类.
WRAP_CONTENT属于LayoutParams, VERTICAL属于LinearLayout.

1
2
3
4
5
import android.widget.LinearLayout.LayoutParams
import android.widget.LinearLayout

layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
orientation = LinearLayout.VERTICAL

删除Commit

删除本地的Commit, 使用

1
git reset --hard HEAD~1

HEAD~1表示前1个, 可以自由设置数字.

参考


标准的gitignore

这是标准的gitignore, 默认项目会生成, 旧的项目可能没有, 需要补充.

1
2
3
4
5
6
7
8
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures

String转换16进制

DeviceID可能是字母, 会导致解析失败, 解析前需要转换String为16进制数.

1
2
3
4
5
6
// String转换40位16进制, 防止DeviceID是字母, @Thx 秋爽&康康
public String toHex(String arg) {
if (!TextUtils.isEmpty(arg)) {
return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}
}

That’s all! Enjoy it!


最初发布地址:
http://www.wangchenlong.org/2016/02/25/tips/1605/071-android-tips-6/
欢迎Follow我的GitHub, 关注我的简书, CSDN, 掘金.
我已委托“维权骑士”为我的文章进行维权行动. 未经授权, 禁止转载, 授权或合作请留言.