状态栏
状态栏颜色设置,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(WindowManager.LayoutParams.FLAG_TRANSLUCENT_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(WindowManager.LayoutParams.FLAG_TRANSLUCENT_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(\, \, \); return acitivity.getResources().getDimensionPixelOffset(resourceId); }
/** * 生成一个和状态栏大小相同的矩形条 * * @param activity 需要设置的activity * @param color 状态栏颜色值 * @return 状态栏矩形条 */ private static View createStatusBarView(Activity activity, int color) {
// 绘制一个和状态栏一样高的矩形 View statusBarView = new View(activity);
LinearLayout.LayoutParams params = new
LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setLayoutParams(params); statusBarView.setBackgroundColor(color); return statusBarView; }
6.0以上系统权限动态申请
在Android6.0中,引入了动态申请权限机制。 以前我们在申请权限的时候,都是写在了Manifest.xml里面。 安装的时候会有一堆提示申请权限的界面,
请注意,如果你使用了API 23以上, 然而并没有用代码处理权限问题。 那么你的程序将会 CRASH !!!
需要动态申请的, 也称为危险权限。
先通过
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 判断系统sdk是否大于6.0(23) 在通过
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,
newString[]{Manifest.permission.ACCESS_FINE_LOCATION}, requestCode); }else{
}
}
//有权限,直接做业务逻辑
//权限是否成功回调 @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[]
grantResults) { switch (requestCode) { case 6: {//权限申请成功