翻看了一下博客,最近的一遍博客还是17年8月份。从9月份进入项目开发后,经历了项目一期和二期,已经很疲惫了,也就很久没有写过博客了,对我自己来说损失了不少,没有时间去总结,没有时间去吸取新的知识。现在项目三期又准备开始了,又要陷入无止境的加班节奏了。。。。。现在对项目中的一些心得和技术梳理一下,总结一下。
1、设置字体透明度
http://blog.youkuaiyun.com/sky1203850702/article/details/44916819
透明度参照表;
00%=FF(不透明) 5%=F2 10%=E5 15%=D8 20%=CC 25%=BF 30%=B2 35%=A5 40%=99 45%=8c 50%=7F
55%=72 60%=66 65%=59 70%=4c 75%=3F 80%=33 85%=21 90%=19 95%=0c 100%=00(全透明)
#4c000000
2、设置部分字体颜色
public void setTextColor(){
SpannableStringBuilder style=new SpannableStringBuilder(binding.tvText.getText().toString()); //假如说获取到的字符串为“最新的程序员书籍《我是最牛的程序员》”那么《我是最牛的程序员》这几个字是蓝色
int fstart=binding.tvText.getText().toString().indexOf(“《我是最牛的程序员》”);
int fend=fstart+”《我是最牛的程序员》”.length();
style.setSpan(new ForegroundColorSpan(Color.parseColor(“#FF65B1FF”)),fstart,fend,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
binding.tvText.setText(style);
}
3、动态获取权限
以获取设备ID为列,动态申请权限
@TargetApi(Build.VERSION_CODES.M)
private void applyPermissions() {
String[] perms = {“android.permission.READ_PHONE_STATE”};
requestPermissions(perms, REQUEST_CODE_ASK_READ_PHONE_STATE);
}
final private int REQUEST_CODE_ASK_READ_PHONE_STATE = 125;
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_READ_PHONE_STATE: {
boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (cameraAccepted) {
//授权成功之后,
checkAppUpdate();
} else {
//用户授权拒绝之后
alertPermissionDialog(“利卡使用电话权限确定本机号码和设备ID,以保证账号登录安全性,不会拨打电话或终止通话\n请在设置-应用-利卡-权限中开启”);
}
}
break;
// default:
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void alertPermissionDialog(final String desc) {
postOnResumed(new Runnable() {
@Override
public void run() {
Bundle args = AlertDialog.prepareArguments(“权限申请”, desc, getString(R.string.refused_), “去设置”);
AlertDialog alertDialog = new AlertDialog() {
@Override
public void onClickOK() {
goToSetting();
finish();
}
@Override
public void onClickCancel() {
Process.killProcess(Process.myPid());//不同意就强制退出APP
}
};
alertDialog.setArguments(args);
alertDialog.setCancelable(false);
alertDialog.show(getSupportFragmentManager(), “alertDialog”);
}
});
}
private void goToSetting() {
//打开本应用去设置权限
String SCHEME = “package”;
//调用系统InstalledAppDetails界面所需的Extra名称(用于Android 2.1及之前版本)
final String APP_PKG_NAME_21 = “com.android.settings.ApplicationPkgName”;
//调用系统InstalledAppDetails界面所需的Extra名称(用于Android 2.2)
final String APP_PKG_NAME_22 = “pkg”;
//InstalledAppDetails所在包名
final String APP_DETAILS_PACKAGE_NAME = “com.android.settings”;
//InstalledAppDetails类名
final String APP_DETAILS_CLASS_NAME = “com.android.settings.InstalledAppDetails”;
-
Intent intent = new Intent();
final int apiLevel = Build.VERSION.SDK_INT;
if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的接口
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts(SCHEME, getPackageName(), null);
intent.setData(uri);
} else { // 2.3以下,使用非公开的接口(查看InstalledAppDetails源码)
// 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。
final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22
-
APP_PKG_NAME_21);
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName(APP_DETAILS_PACKAGE_NAME,
APP_DETAILS_CLASS_NAME);
intent.putExtra(appPkgName, getPackageName());
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
//打开应用管理页面
Intent intent = new Intent();
intent.setAction(“android.intent.action.MAIN”);
intent.setClassName(“com.android.settings”, “com.android.settings.ManageApplications”);
startActivity(intent);
}
public void checkAppUpdate() {
LaunchRequest request = new LaunchRequest();
request.executeSilent(this);
}