Android常用代码-底部弹出PopupWindow

关键代码

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
34
35
/**
* 显示自定义底部弹出PopupWindow
*
* @param parent 传根布局就好了
* @param contentView PopupWindow内容
* @param bgColor 背景颜色(窗体变暗效果)
* @param focusable 是否点击空白区域取消(非全屏时可以)和返回键关闭
* @param fullScreen 是否全屏
* @param onDismissListener 取消监听
*/
public void showBottomPopupWindow(View parent, View contentView, int bgColor, boolean focusable, boolean fullScreen, PopupWindow.OnDismissListener onDismissListener) {
hideBottomDialog();
AutoUtils.auto(contentView);
popupWindow = new PopupWindow(ViewGroup.LayoutParams.MATCH_PARENT, fullScreen ? ViewGroup.LayoutParams.MATCH_PARENT : ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setContentView(contentView);
// 设置弹出窗体可点击
popupWindow.setFocusable(focusable);
// 设置弹出窗体的背景
popupWindow.setBackgroundDrawable(new ColorDrawable(bgColor));
if (onDismissListener != null) {
popupWindow.setOnDismissListener(onDismissListener);
}
//设置弹出窗体显示时的动画,从底部向上弹出
popupWindow.setAnimationStyle(R.style.ZzAnimationDialog);
popupWindow.showAtLocation(parent, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
}
/**
* 隐藏自定义底部弹出PopupWindow
*/
public void hideBottomDialog() {
if (popupWindow != null) {
popupWindow.dismiss();
popupWindow = null;
}
}

Android常用代码-bugly集成

集成bugly

1
2
//bugly
compile 'com.tencent.bugly:crashreport:latest.release'

添加权限

1
2
3
<!-- bugly start-->
<uses-permission android:name="android.permission.READ_LOGS" />
<!--bugly end-->

Application的onCreate方法中初始化

不带X5内核

1
2
3
4
5
try {
CrashReport.initCrashReport(this, "你的appID", false);
} catch (Exception e) {
e.printStackTrace();
}

带X5内核

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*bugly+x5内核*/
try {
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(this);
strategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {
public Map onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) {
LinkedHashMap map = new LinkedHashMap();
String x5CrashInfo = com.tencent.smtt.sdk.WebView.getCrashExtraMessage(GFApplication.this);
map.put("x5crashInfo", x5CrashInfo);
return map;
}

@Override
public byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType, String errorMessage, String errorStack) {
try {
return "Extra data.".getBytes("UTF-8");
} catch (Exception e) {
return null;
}
}
});
CrashReport.initCrashReport(this, "你的appID", false, strategy);
} catch (Exception e) {
e.printStackTrace();
}

Android常用代码-App更新

APP更新逻辑

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
private void checkUpdate() {
String key = SpUtil.getKey();

Api.getApi0()
.CheckUpdate(key, SystemUtil.getPackageInfo(this).versionCode)
.compose(RxHelper.<CheckUpdateResult>io_main())
.subscribe(new Subscriber<CheckUpdateResult>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(CheckUpdateResult checkUpdateResult) {
if (checkUpdateResult.getCode() == 1) {
CheckUpdateResult.DataEntity data = checkUpdateResult.getData();
showUpdate(data);
}
}
});
}

private void showUpdate(final CheckUpdateResult.DataEntity data) {
if (data != null) {
showTwoBtnDialog("更新", "v" + data.getVersionName() + "\n" + data.getUpdateInfo(), false, new IBaseActivity.OnTwoBtnClick() {
@Override
public void onOk() {
final TextView[] tv = new TextView[1];
final ProgressBar[] pb = new ProgressBar[1];
showUpdateDialog("更新", "即将开始下载...", false, new IBaseActivity.OnOneBtnClickListener() {
@Override
public void onProgress(TextView textView, ProgressBar progressBar) {
tv[0] = textView;
pb[0] = progressBar;
}

@Override
public void onOK() {
}
});
String url = Constants.API + File.separator + data.getUrl();
final String name = "HighNetFix_" + data.getVersionName() + "_" + data.getVersionCode() + ".apk";
OkGo.<File>get(url)
.tag(this)
.execute(new FileCallback(Constants.APK_DOWNLOAD_PATH, name) {
@Override
public void onSuccess(Response<File> response) {
hideUpdateDialog();
ApkUtils.installApk(HomePageActivity.this, BuildConfig.APPLICATION_ID, Constants.APK_DOWNLOAD_PATH, name);
}

@Override
public void onError(Response<File> response) {
hideUpdateDialog();
ToastUtils.showCustomBgToast("下载失败,请检查您的网络设置。");
}

@Override
public void downloadProgress(Progress progress) {
long currentSize = progress.currentSize;
long totalSize = progress.totalSize;
int pro = (int) (currentSize * 100.0 / totalSize + 0.5f);
tv[0].setText("已下载:" + pro + "%");
pb[0].setProgress(pro);
}
});
}

@Override
public void onCancel() {
}
});
}
}

Android常用代码-微信QQ分享文件

不使用SDK实现QQ和微信文件与文字的分享。

QQ分享文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void shareFileToQQ(File file) throws Exception{
Intent share = new Intent(Intent.ACTION_SEND);
ComponentName component = new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity");
share.setComponent(component);
Uri uri = null;
if (Build.VERSION.SDK_INT > 23) {
uri = FileProvider.getUriForFile(getActivity(),
BuildConfig.APPLICATION_ID + ".provider",
file);
} else {
uri = Uri.fromFile(file);
}
share.putExtra(Intent.EXTRA_STREAM, uri);
share.setType("*/*");
startActivity(Intent.createChooser(share, "发送"));
}

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
List<String> data = new ArrayList<>();
data.add("http://p1.so.qhmsg.com/dmfd/326_204_/t01ad675c2d6620f626.jpg");
data.add("http://p4.so.qhmsg.com/dmfd/326_204_/t01e7b8da6f7881d669.jpg");
data.add("http://p2.so.qhimgs1.com/dmfd/326_204_/t016b83625d3693e592.jpg");
data.add("http://p0.so.qhimgs1.com/dmfd/326_204_/t019a8f0f4789b91170.jpg");
data.add("http://p1.so.qhimgs1.com/dmfd/326_204_/t01da7b6be4c2e7485d.jpg");
data.add("http://p4.so.qhimgs1.com/dmfd/326_204_/t016122ec45c5fdc5fa.jpg");
data.add("http://p0.so.qhmsg.com/dmfd/326_204_/t015ba6df95da81c21f.jpg");
data.add("http://p0.so.qhimgs1.com/dmfd/326_204_/t012c852c8f981d6a00.jpg");
data.add("http://p4.so.qhimgs1.com/dmfd/326_204_/t01bc3afb43b885f79a.jpg");
data.add("http://p2.so.qhmsg.com/dmfd/326_204_/t016f319fe697b397a7.jpg");
data.add("http://p4.so.qhmsg.com/dmfd/326_204_/t01260296831eb4e1c9.jpg");
data.add("http://p2.so.qhimgs1.com/dmfd/326_204_/t01f70e3d434b658072.jpg");
data.add("http://p1.so.qhimgs1.com/dmfd/326_204_/t01ff382f9ac4ff3b41.jpg");
data.add("http://p3.so.qhimgs1.com/dmfd/326_204_/t0136c51e038b8eb443.jpg");
data.add("http://p4.so.qhimgs1.com/dmfd/326_204_/t01510b700b852c19ea.jpg");
data.add("http://p2.so.qhmsg.com/dmfd/326_204_/t01ee2021295046db97.jpg");
data.add("http://p2.so.qhimgs1.com/dmfd/326_204_/t011827d91512e21f1e.jpg");
data.add("http://p4.so.qhimgs1.com/dmfd/326_204_/t01e0d10a1d9c967b6a.jpg");
data.add("http://p5.so.qhimgs1.com/dmfd/326_204_/t014dee2f747c97027b.jpg");
data.add("http://p0.so.qhmsg.com/dmfd/326_204_/t015937ffe391b99cbf.jpg");
data.add("http://p2.so.qhimgs1.com/dmfd/326_204_/t01c8781008ac43b8b2.jpg");
data.add("http://p0.so.qhimgs1.com/dmfd/326_204_/t0157cf838838b73380.jpg");
data.add("http://p2.so.qhimgs1.com/dmfd/326_204_/t01486d9595e7e72a7e.jpg");
data.add("http://p1.so.qhmsg.com/dmfd/326_204_/t016ddb799a12726bc6.jpg");
data.add("http://p4.so.qhimgs1.com/dmfd/326_204_/t01cbfab89caa120e9a.jpg");
data.add("http://p0.so.qhmsg.com/dmfd/326_204_/t01fd0af7e89abd4615.jpg");
data.add("http://p2.so.qhimgs1.com/dmfd/326_204_/t0155c730d796084202.jpg");
data.add("http://p0.so.qhmsg.com/dmfd/326_204_/t01007ed5e564c9c99f.jpg");
data.add("http://p1.so.qhimgs1.com/dmfd/326_204_/t0127d36bd652e5f6ed.jpg");

Android常用代码-切换主题

核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
mToolbar.setBackgroundResource(colorPrimary);
mToolbar.setTitleTextColor(ContextCompat.getColor(this, android.R.color.white));
mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
}
if (Build.VERSION.SDK_INT >= 23) {
Window window = getWindow();
int systemUiVisibility = window.getDecorView().getSystemUiVisibility();
systemUiVisibility &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
window.getDecorView().setSystemUiVisibility(systemUiVisibility);
}
}

使用方式

1
setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);