介绍关于Android的一些有趣的小知识点. 本文是第六篇, 欢迎阅读.
其余第一篇, 第二篇, 第三篇, 第四篇, 第五篇.
1. 控件位置
获取控件四个角的位置.
控件
代码
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;
}
2. 异常Error:(216) Apostrophe not preceded by ...
原因是字符串中包含单引号('), 导致, 添加转义符号即可.
<string name="hello_kotlin">Hello Kotlin, I\'m Spike! </string>
3. Editable和String的转换
Editable是EditText使用的字符串格式. 与String可以相互转换.
Editable editable = new SpannableStringBuilder("Pass a string here");
String str = editable.toString();
4. 设置WRAP_CONTENT和VERTICAL
在Kotlin中, 使用属性扩展时, 需要记住类.
WRAP_CONTENT属于LayoutParams, VERTICAL属于LinearLayout.
import android.widget.LinearLayout.LayoutParams
import android.widget.LinearLayout
layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
orientation = LinearLayout.VERTICAL
5. 删除Commit
删除本地的Commit, 使用
git reset --hard HEAD~1
HEAD~1表示前1个, 可以自由设置数字.
6. 标准的gitignore
这是标准的gitignore, 默认项目会生成, 旧的项目可能没有, 需要补充.
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
7. String转换16进制
DeviceID可能是字母, 会导致解析失败, 解析前需要转换String为16进制数.
// String转换40位16进制, 防止DeviceID是字母, @Thx 秋爽&康康
public String toHex(String arg) {
return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}
That's all! Enjoy it!
网友评论