2017-8-9 遇到的一点小问题

.

一般的设备从API19(Build.VERSION_CODES.KITKAT)开始,可以改变状态栏背景颜色。需要先在xml根布局写上android:fitsSystemWindows="true",然后再将状态栏弄成透明的:

if (Build.VERSION.SDK_INT >= 19) {  getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//状态栏透明  // getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//导航栏透明}

然后SystemBarTintManager tintManager = new SystemBarTintManager(this);tintManager.setStatusBarTintColor(colorId);进行状态栏着色。

private final SystemBarConfig mConfig;/**状态栏是否可用*/private boolean mStatusBarAvailable;private boolean mNavBarAvailable;/**是否允许状态栏着色*/private boolean mStatusBarTintEnabled;private boolean mNavBarTintEnabled;private View mStatusBarTintView;private View mNavBarTintView;@TargetApi(19)public SystemBarTintManager(Activity activity) {  Window win = activity.getWindow();  ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {    int[] attrs = {android.R.attr.windowTranslucentStatus,                    android.R.attr.windowTranslucentNavigation};    TypedArray a = activity.obtainStyledAttributes(attrs);    try {      mStatusBarAvailable = a.getBoolean(0, false);      mNavBarAvailable = a.getBoolean(0, false);    } finally {      a.recycle();    }    // check window flags    WindowManager.LayoutParams winParams = win.getAttributes();    int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;    if ((winParams.flags & bits) != 0) {      mStatusBarAvailable = true;    }    bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;     if ((winParams.flags & bits) != 0) {      mNavBarAvailable = true;    }  }  mConfig = new SystemBarConfig(activity, mStatusBarAvailable, mNavBarAvailable);  // device might not have virtual navigation keys  if (!mConfig.hasNavigtionBar()) {    mNavBarAvailable = false;  }  if (mStatusBarAvailable) {    setupStatusBarView(activity, decorViewGroup);  }  if (mNavBarAvailable) {    setupNavBarView(activity, decorViewGroup);  }  setStatusBarTintEnabled(true);}public void setStatusBarTintEnabled(boolean enabled) {  mStatusBarTintEnabled = enabled;  if (mStatusBarAvailable) {    mStatusBarTintView.setVisibility(enabled ? View.VISIBLE : View.GONE);   }}public void setStatusBarTintColor(int color) {  if (mStatusBarAvailable) {    mStatusBarTintView.setBackgroundColor(color);  }}

不过因为嫌麻烦,且自己的手机升级成21,所以只用了一阵子就改成全部从21开始才改变状态栏背景颜色。
API21(Build.VERSION_CODES.LOLLIPOP)开始,改变状态栏背景颜色很简单。直接在res文件夹里创建values-v21文件夹,然后style主题里写上@color/white。或者在Activity里写上activity.getWindow().setStatusBarColor(Color.WHITE);来动态改变状态栏背景颜色。
但一般的设备得从API23(Build.VERSION_CODES.M)开始,才能改变状态栏文字及图标颜色。直接在res文件夹里创建values-v23文件夹,然后style主题里写上true就可以默认使用暗色的文字和图标了。也可代码里写上

Window window = activity.getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

进行动态更改。
需要文字图标改成浅色就

activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

一般设备都是这样操作,不过小米从miuiv6及4.4及以上版本开始就能改变背景色及图标颜色,而开发版 7.7.13及以后则使用Android自带方法。而魅族也有自己的方法可以设置。我的锤子是Android5.1.1,需要在手机-设置-全局高级设置-状态栏风格-自适应,才能根据顶部标题栏颜色改变字体图标颜色。嫌麻烦,懒得区分处理了。只从21开始才改变状态栏背景颜色,如果是浅色,就23才改变,21显示黑色的。
注:刚开始网上找了个改为深色的,是activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);,测试一下,发现顶部没有状态栏,布局会向上跑,即使在xml里写上android:fitsSystemWindows="true"也没用。记录一下。

.

安卓动态申请权限

if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {  if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {    L.e("1");    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 123);    //如果第一次申请,用户拒接,接下来会进入这里面.在这边显示的对话框会有不再提示的选择框,勾选后不再进入这边.  } else {    L.e("2");    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 123);    //第一次申请权限会进入这边,并弹对话框,让用户选择是否授权权限    //如果勾选不再提示,会直接进入这里面,但是不显示对话框,直接回调到5   }} else {  L.e("3");  //同意权限就会在这边}

申请后回调结果

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {  super.onRequestPermissionsResult(requestCode, permissions, grantResults);  switch (requestCode) {    case 123:       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {        L.e("4");        //用户同意权限会进入这边      } else {        L.e("5");        //用户不同意则不会进入这边      }    return;  }}
.

设计给的图都是没有标准尺寸和颜色,所以尺寸都是凭感觉,颜色则用取色器。换电脑没把取色器拷过来,所以都是用QQ的截图功能来取色。使用Ctrl+Alt+A激活截屏,鼠标对着的颜色值就有了,不过是显示的RGB颜色值,需要按住Ctrl键才能显示十六进制颜色码

QQ截屏RGB
QQ截屏16进制

更多相关文章

  1. android广播指定权限
  2. Android(安卓)Theme
  3. Android(安卓)shape 矩形边框
  4. Android中对SD卡的读取与写入
  5. Android(安卓)请求Root权限代码
  6. Android(安卓)MaterialButton的一些问题
  7. EditText 修改光标颜色及位置
  8. android 定制机删定制程序---
  9. Android使用ListView应该注意的地方

随机推荐

  1. android-【机型-版本-分辨率】测试点罗列
  2. Android开发之低调的Service
  3. Perl登陆Android
  4. Android自动化测试框架Robotium
  5. adb使用-详细教程(Awesome Adb)
  6. android之resources资源
  7. Android 轮询最佳实践 Service + AlarmMa
  8. Android在Mac下adb不能连接
  9. Android:eclipse中导入项目无法编译,robot
  10. 从零开始学android:Android中的基本控件(