该篇主要收集Android学习资料和技术文档
记录Android开发过程中的一些小技巧,代码片段,方便快速开发,提高效率

学习资料

Android开源项目集合

Gradle指南

技术文档

Android微信智能心跳方案

Android主题切换

贝塞尔曲线


Android studio

raw和assets

raw文件夹创建:右键单击res文件夹选择new–》Android resource directory选项
raw

assets文件夹创建:右键单击main文件夹选择new–》Folder –》Assets 》Folder选项

注意:assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,
且该文件被打包到APK中时,不会被编码到二进制文件。 assets目录不会被映射到R中,
因此,资源无法通过R.id方式获取,必须要通过AssetManager进行操作与获取;
res/raw目录下的资源会被映射到R中,可以通过getResource()方法获取资源。
assets下可以有多级目录,res/raw下不可以有多级目录。

获取assets资源的输入流:InputStream inputStream = context.getResources().getAssets().open(“filename”);
混合开发中,可以结合WebView加载assets目录下的网页。
加载assets目录下的网页,css,js,图片等文件:
webView.loadUrl(“file:///android_asset/xxx.html”);

获取raw资源的输入流:InputStream is = getResources().openRawResource(R.id.fileNameID) ;

代码速查

xml

button常用点击效果

1
2
3
4
5
6
7
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/btn_login_press"/> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/btn_login_press"/> <!-- focused -->
<item android:drawable="@drawable/btn_login_mornal"/> <!-- default -->
</selector>

styles.xml文件下的一些常用样式

dialog常用样式:

1
2
3
4
5
6
7
8
9
10
11
12
13
<style name="my_dialog">
<!-- 是否有边框 -->
<item name="android:windowFrame">@null</item>
<!--是否在悬浮Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 标题 -->
<item name="android:windowNoTitle">true</item>
<!--阴影 -->
<item name="android:windowIsTranslucent">true</item><!--半透明-->
<!--背景透明-->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
</style>

欢迎页,如果带大图当背景:

1
2
3
4
5
6
7
<style name="WelcomeStyle" parent="MarioTheme">
<!-- 隐藏Activity窗口的ActionBar -->
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@drawable/img_welcome</item>
</style>

listview一些重要属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,
//希望最新的条目可以自动滚动到可视范围内。
//通过设置的控件transcriptMode属性可以将
//Android平台的控件(支持ScrollBar)自动滑动到最底部
android:transcriptMode="alwaysScroll"
android:cacheColorHint="#00000000"
android:listSelector="@color/pink" listView item 选中时的颜色。
android:divider="#f9b68b" //分割线颜色
android:divider="@drawable/@null" //不想显示分割线
android:dividerHeight="1dp" //分割线边距
android:scrollbars="none" //setVerticalScrollBarEnabled(true);不显示滚动条
android:fadeScrollbars="true"//设置为true就可以实现滚动条的自动隐藏和显示
android:fadingEdge="none" 去掉上边和下边黑色的阴影
android:fastScrollEnabled = "true" //加快滑动速度

xml里面引用api版本特殊属性

1
2
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="23"

修改状态栏字体颜色

该特性只有在android6.0才支持,或者国产的一些特殊的rom,如miui等

1
2
3
<!-- true为黑色系 false为亮白色系 -->
<item name="android:windowLightStatusBar">true</item>
<item name="android:statusBarColor">@color/status_bar_color</item>


代码片段

生成二维码去白边

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
32
33
// 创建二维码
public static Bitmap createQRBitmap(String str, int width, int height, int color, int bgColor) throws WriterException
{
// 用于设置QR二维码参数
Hashtable<EncodeHintType, Object> qrParam = new Hashtable<EncodeHintType, Object>();
// 设置QR二维码的纠错级别——这里选择最高H级别
qrParam.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 设置编码方式
qrParam.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 设置最小空白边框
qrParam.put(EncodeHintType.MARGIN, 1);
//
BitMatrix matrix = new QRCodeWriter().encode(str, BarcodeFormat.QR_CODE, width, height, qrParam);
int[] pixels = new int[width * height];
boolean first = false;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (matrix.get(x, y)) {
if (!first) {
first = true;
// 记录第一次二维码像素点距离边界的距离,这个距离就是白边的距离
offset = y;
}
pixels[y * width + x] = color;
} else {
pixels[y * width + x] = bgColor;
}
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_4444);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}

其他

WebViews调试

要启用 WebView 调试,请在 WebView 类上调用静态方法 setWebContentsDebuggingEnabled。

1
2
3
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}

在 DevTools 中打开 WebView
在google浏览器中输入以下地址
chrome://inspect 页面将显示您的设备上已启用调试的 WebView 列表

调用QQ

1
2
3
4
5
6
7
8
try {
//可以跳转到添加好友,如果qq号是好友了,直接聊天
String url = "mqq://im/chat?chat_type=wpa&uin=2121825966&version=1&src_type=web";//uin是发送过去的qq号码
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context,"请检查是否安装QQ",Toast.LENGTH_SHORT).show();
}

Android Gradle 配置打包输出名称格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 自定义输出配置,这里我们加上APK版本号1.0
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
def fileName
if (outputFile != null && outputFile.name.endsWith('.apk')) {
if (variant.buildType.name.equals('release'))
{
fileName = "mmw_v${defaultConfig.versionName}.apk"
}else if(variant.buildType.name.equals('debug'))
{
fileName = "mmw_v${defaultConfig.versionName}_test.apk"
}
output.outputFile = new File(outputFile.parent, fileName)
}
}
}