android开发中知识点记录
状态栏
状态栏颜色设置,4.4以上系统才能设置状态栏
5.0以上google提供activity.getWindow().setStatusBarColor(color);
方法直接设置状态栏颜色,设计上状态栏以深色为佳,不用改变状态栏字体颜色,状态栏默认字体颜色是白色,改变字体颜色在小米,魅族这些定制系统的手机上一般很难适配,达到预期。所以一般不建议设计状态栏,actionBar,导航栏为白色。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上系统//5.0及以上,不设置透明状态栏,设置会有半透明阴影activity.getWindow().clearFlags(https://www.360docs.net/doc/ce18462255.html,youtParams.FLAG_TRAN SLUCENT_STATUS);//设置statusBar的背景色activity.getWindow().setStatusBarColor(color);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //4.4 ~ 5.0系统
activity.getWindow().addFlags(https://www.360docs.net/doc/ce18462255.html,youtParams.FLAG_TRANS LUCENT_STATUS);
// 生成一个状态栏大小的矩形View statusView = createStatusBarView(activity, color);// 添加statusView 到布局中ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
decorView.addView(statusView);//让我们的activity_main。xml中的布局适
应屏幕}
/**
* 获取状态栏的高度*
* @param acitivity* @return*/public static int getStatusBarHeight(Activity acitivity) {int resourceId =
acitivity.getResources().getIdentifier("status_bar_height", "dimen", "android");return
acitivity.getResources().getDimensionPixelOffset(resourceId);
}/**
* 生成一个和状态栏大小相同的矩形条*
* @param activity 需要设置的activity
* @param color 状态栏颜色值* @return 状态栏矩形条*/private static View createStatusBarView(Activity activity, int color) {// 绘制一个和状态栏一样高的矩形View statusBarView = new View(activity);
https://www.360docs.net/doc/ce18462255.html,youtParams params = new
https://www.360docs.net/doc/ce18462255.html,youtParams(https://www.360docs.net/doc/ce18462255.html,youtParams.MATCH_PARENT,get StatusBarHeight(activity));
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(color);return statusBarView;
}
6.0以上系统权限动态申请
在Android6.0中,引入了动态申请权限机制。以前我们在申请权限的时候,都是写在了Manifest.xml里面。安装的时候会有一堆提示申请权限的界面,
请注意,如果你使用了API 23以上, 然而并没有用代码处理权限问题。那么你的程序将会CRASH !!!
需要动态申请的, 也称为危险权限。
先通过
在通过
ContextCompat.checkSelfPermission(@NonNull Context context, @NonNull
String permission)检测权限是否允许,提示和拒绝时,返回-1 ,允许时返回0返回-1时,通过ContextCompat.requestPermission(context,String[]{} permissions)
来申请权限。在activity的回调方法onRequestPermissionsResult获取申请结果
实例:
if (Build.VERSION.SDK_INT >= 23) {
int permiss = ActivityCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_FINE_LOCATION);if (permiss != 0) {//没权限
ActivityCompat.requestPermissions(context,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
requestCode);
}else{
//有权限,直接做业务逻辑
}
}
//权限是否成功回调@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {switch (requestCode)
{case 6: {//权限申请成功if(grantResults != null && grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)//权限申请成功locationUtil.location(true);
}else{// MyToast.toast(getActivity(), "定位权限申请失败,请到设置中设置允许");
}
}
}
}
7.0系统对第三方应用赋予对uri读写的权限
1.AndroidManifest.xml文件,添加provider标签,映射路径
1. 2. android:name="android.support.v4.content." 3. android:authorities="包名.my" //需要和代码中的字符串相同 4. android:exported="false" 5. android:grantUriPermissions="true" 6. 7. android:name="android.support." 8. android:resource="@xml/path_file" /> 9.
authorities:是该项目的包名+provider
grantUriPermissions:必须是true,表示授予URI 临时访问权限
exported:必须是false
resource:中的@xml/是我们接下来要在资源文件目录下添加的文件
2.在res/xml下新建一个path_文件,文件名随便去,但是及上步骤一致即可。
1.
2.
3.
4.
12.
录,name="camera_picture"是虚拟目录camera_picture -->
13.