Skip to content

Commit 9468a64

Browse files
committed
see 04/21 log
1 parent eab53cc commit 9468a64

File tree

17 files changed

+2220
-1714
lines changed

17 files changed

+2220
-1714
lines changed

README-CN.md

Lines changed: 760 additions & 753 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 758 additions & 743 deletions
Large diffs are not rendered by default.

app/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,6 @@ dependencies {
4040
debugCompile "com.squareup.leakcanary:leakcanary-android:$LEAKCANARY_VERSION"
4141
releaseCompile leakCanary
4242
testCompile leakCanary
43-
}
43+
}
44+
45+

app/src/main/java/com/blankj/androidutilcode/activity/SpannableActivity.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,43 +46,43 @@ public void updateDrawState(TextPaint ds) {
4646
TextView tvAboutSpannable = (TextView) findViewById(R.id.tv_about_spannable);
4747
// 响应点击事件的话必须设置以下属性
4848
tvAboutSpannable.setMovementMethod(LinkMovementMethod.getInstance());
49-
tvAboutSpannable.setText(SpannableStringUtils
50-
.getBuilder("测试SpannableStringUtils\n")
51-
.setBold().setForegroundColor(Color.YELLOW).setBackgroundColor(Color.GRAY).setAlign(Layout.Alignment.ALIGN_CENTER)
49+
tvAboutSpannable.setText(new SpannableStringUtils.Builder()
50+
.appendLine("测试SpannableStringUtils").setBold().setForegroundColor(Color.YELLOW).setBackgroundColor(Color.GRAY).setAlign(Layout.Alignment.ALIGN_CENTER)
5251
.append("测试")
5352
.append("前景色").setForegroundColor(Color.GREEN)
54-
.append("背景色\n").setBackgroundColor(Color.RED)
55-
.append("测试首行缩进\n").setLeadingMargin(30, 50)
56-
.append("测试引用\n").setQuoteColor(Color.YELLOW)
57-
.append("测试列表项\n").setBullet(30, Color.YELLOW)
53+
.appendLine("背景色").setBackgroundColor(Color.RED)
54+
.appendLine("测试首行缩进").setLeadingMargin(30, 50)
55+
.appendLine("测试引用").setQuoteColor(Color.BLACK)
56+
.appendLine("测试列表项").setBullet(30, Color.BLACK)
57+
.appendLine("测试32dp字体").setFontSize(36, true)
5858
.append("测试")
59-
.append("2倍字体\n").setProportion(2)
59+
.appendLine("2倍字体").setFontProportion(2)
6060
.append("测试")
61-
.append("横向2倍字体\n").setXProportion(2)
61+
.appendLine("横向2倍字体").setFontXProportion(2)
6262
.append("测试")
6363
.append("删除线").setStrikethrough()
64-
.append("下划线\n").setUnderline()
64+
.appendLine("下划线").setUnderline()
6565
.append("测试")
6666
.append("上标").setSuperscript()
67-
.append("下标\n").setSubscript()
67+
.appendLine("下标").setSubscript()
6868
.append("测试")
6969
.append("粗体").setBold()
7070
.append("斜体").setItalic()
71-
.append("粗斜体\n").setBoldItalic()
72-
.append("monospace font\n").setFontFamily("monospace")
73-
.append("serif font\n").setFontFamily("serif")
74-
.append("sans-serif font\n").setFontFamily("sans-serif")
75-
.append("测试正常对齐\n").setAlign(Layout.Alignment.ALIGN_NORMAL)
76-
.append("测试居中对齐\n").setAlign(Layout.Alignment.ALIGN_CENTER)
77-
.append("测试相反对齐\n").setAlign(Layout.Alignment.ALIGN_OPPOSITE)
71+
.appendLine("粗斜体").setBoldItalic()
72+
.appendLine("monospace font").setFontFamily("monospace")
73+
.appendLine("serif font").setFontFamily("serif")
74+
.appendLine("sans-serif font").setFontFamily("sans-serif")
75+
.appendLine("测试正常对齐").setAlign(Layout.Alignment.ALIGN_NORMAL)
76+
.appendLine("测试居中对齐").setAlign(Layout.Alignment.ALIGN_CENTER)
77+
.appendLine("测试相反对齐").setAlign(Layout.Alignment.ALIGN_OPPOSITE)
7878
.append("测试")
79-
.append("图片\n").setResourceId(R.mipmap.ic_launcher)
79+
.appendLine("图片").setResourceId(R.mipmap.ic_launcher)
8080
.append("测试")
81-
.append("点击事件\n").setClickSpan(clickableSpan)
81+
.appendLine("点击事件").setClickSpan(clickableSpan)
8282
.append("测试")
83-
.append("Url\n").setUrl("https://github.com/Blankj/AndroidUtilCode")
83+
.appendLine("Url").setUrl("https://github.com/Blankj/AndroidUtilCode")
8484
.append("测试")
85-
.append("模糊字体\n").setBlur(3, BlurMaskFilter.Blur.NORMAL)
85+
.append("模糊").setBlur(3, BlurMaskFilter.Blur.NORMAL)
8686
.create()
8787
);
8888
}

app/src/main/res/values/dimens.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<resources>
22
<dimen name="spacing_16">16dp</dimen>
3-
<dimen name="font_32">32sp</dimen>
3+
<dimen name="font_26">26sp</dimen>
44
</resources>

app/src/main/res/values/styles.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
</style>
1414

1515
<style name="TextStyle">
16-
<item name="android:textSize">@dimen/font_32</item>
16+
<item name="android:textSize">@dimen/font_26</item>
1717
</style>
1818

19-
<style name="WideBtnStyle" parent="TextStyle">
20-
<item name="android:textAllCaps" tools:targetApi="ice_cream_sandwich">false</item>
19+
<style name="WideBtnStyle">
20+
<item name="android:textAllCaps">false</item>
21+
<item name="android:textSize">@dimen/font_26</item>
2122
</style>
2223
</resources>

update_log.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
* 17/04/21 发布Version1.4.0
2+
* 17/04/20 SpannableStringUtils新增设置字体尺寸
13
* 17/03/29 修改README
2-
* 17/03/28 新增BaseActivity
34
* 17/03/27 更新LogUtils
45
* 17/03/26 更新LogUtils
56
* 17/03/25 更新LogUtils

utilcode/project.properties

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#project
2-
project.name=ALog
2+
project.name=UtilCode
33
project.groupId=com.blankj
4-
project.artifactId=alog
4+
project.artifactId=utilcode
55
project.packaging=aar
6-
project.siteUrl=https://github.com/Blankj/ALog
7-
project.gitUrl=https://github.com/Blankj/ALog.git
6+
project.siteUrl=https://github.com/Blankj/AndroidUtilCode
7+
project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
88

99
#javadoc
10-
javadoc.name=ALog
10+
javadoc.name=UtilCode

utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public static void setColor(Activity activity, int color, int statusBarAlpha) {
6868
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
6969
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
7070
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
71+
decorView.getChildAt(0).setFitsSystemWindows(false);
7172
int count = decorView.getChildCount();
7273
if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
7374
decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package com.blankj.utilcode.util;
2+
3+
import android.annotation.TargetApi;
4+
import android.app.Activity;
5+
import android.content.Context;
6+
import android.content.pm.PackageManager;
7+
import android.os.Build;
8+
import android.support.v4.app.ActivityCompat;
9+
import android.support.v4.content.ContextCompat;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
/**
15+
* <pre>
16+
* author: Blankj
17+
* blog : http://blankj.com
18+
* time : 2017/04/16
19+
* desc : 权限相关工具类
20+
* </pre>
21+
*/
22+
public final class PermissionUtils {
23+
24+
private static int mRequestCode = -1;
25+
26+
private static OnPermissionListener mOnPermissionListener;
27+
28+
public interface OnPermissionListener {
29+
30+
void onPermissionGranted();
31+
32+
void onPermissionDenied(String[] deniedPermissions);
33+
}
34+
35+
public abstract static class RationaleHandler {
36+
private Context context;
37+
private int requestCode;
38+
private String[] permissions;
39+
40+
protected abstract void showRationale();
41+
42+
void showRationale(Context context, int requestCode, String[] permissions) {
43+
this.context = context;
44+
this.requestCode = requestCode;
45+
this.permissions = permissions;
46+
showRationale();
47+
}
48+
49+
@TargetApi(Build.VERSION_CODES.M)
50+
public void requestPermissionsAgain() {
51+
((Activity) context).requestPermissions(permissions, requestCode);
52+
}
53+
}
54+
55+
@TargetApi(Build.VERSION_CODES.M)
56+
public static void requestPermissions(Context context, int requestCode
57+
, String[] permissions, OnPermissionListener listener) {
58+
requestPermissions(context, requestCode, permissions, listener, null);
59+
}
60+
61+
@TargetApi(Build.VERSION_CODES.M)
62+
public static void requestPermissions(Context context, int requestCode
63+
, String[] permissions, OnPermissionListener listener, RationaleHandler handler) {
64+
if (context instanceof Activity) {
65+
mRequestCode = requestCode;
66+
mOnPermissionListener = listener;
67+
String[] deniedPermissions = getDeniedPermissions(context, permissions);
68+
if (deniedPermissions.length > 0) {
69+
boolean rationale = shouldShowRequestPermissionRationale(context, deniedPermissions);
70+
if (rationale && handler != null) {
71+
handler.showRationale(context, requestCode, deniedPermissions);
72+
} else {
73+
((Activity) context).requestPermissions(deniedPermissions, requestCode);
74+
}
75+
} else {
76+
if (mOnPermissionListener != null)
77+
mOnPermissionListener.onPermissionGranted();
78+
}
79+
} else {
80+
throw new RuntimeException("Context must be an Activity");
81+
}
82+
}
83+
84+
/**
85+
* 请求权限结果,对应Activity中onRequestPermissionsResult()方法。
86+
*/
87+
public static void onRequestPermissionsResult(Activity context, int requestCode, String[] permissions, int[]
88+
grantResults) {
89+
if (mRequestCode != -1 && requestCode == mRequestCode) {
90+
if (mOnPermissionListener != null) {
91+
String[] deniedPermissions = getDeniedPermissions(context, permissions);
92+
if (deniedPermissions.length > 0) {
93+
mOnPermissionListener.onPermissionDenied(deniedPermissions);
94+
} else {
95+
mOnPermissionListener.onPermissionGranted();
96+
}
97+
}
98+
}
99+
}
100+
101+
/**
102+
* 获取请求权限中需要授权的权限
103+
*/
104+
private static String[] getDeniedPermissions(Context context, String[] permissions) {
105+
List<String> deniedPermissions = new ArrayList<>();
106+
for (String permission : permissions) {
107+
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
108+
deniedPermissions.add(permission);
109+
}
110+
}
111+
return deniedPermissions.toArray(new String[deniedPermissions.size()]);
112+
}
113+
114+
/**
115+
* 是否彻底拒绝了某项权限
116+
*/
117+
public static boolean hasAlwaysDeniedPermission(Context context, String... deniedPermissions) {
118+
for (String deniedPermission : deniedPermissions) {
119+
if (!shouldShowRequestPermissionRationale(context, deniedPermission)) {
120+
return true;
121+
}
122+
}
123+
return false;
124+
}
125+
126+
/**
127+
* 是否有权限需要说明提示
128+
*/
129+
private static boolean shouldShowRequestPermissionRationale(Context context, String... deniedPermissions) {
130+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false;
131+
boolean rationale;
132+
for (String permission : deniedPermissions) {
133+
rationale = ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, permission);
134+
if (rationale) return true;
135+
}
136+
return false;
137+
}
138+
}

0 commit comments

Comments
 (0)