在APP中使用沉浸式状态栏已经是一个很普遍的现象了.
需要引入依赖
compile ‘com.readystatesoftware.systembartint:systembartint:1.0.4’
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.content.CursorLoader;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import com.android.lanhaihui.smursscustomerapp.R;
import com.readystatesoftware.systembartint.SystemBarTintManager;
import java.io.File;
public class AppUtils {
private static final String TAG = "AppUtils";
public static String getPicturePath(Context context) {
if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
return context.getFilesDir().getAbsolutePath();
File file = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
if (file != null)
return file.getAbsolutePath();
file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
if (file != null)
return file.getAbsolutePath();
return context.getFilesDir().getAbsolutePath();
}
/**
* 沉浸式透明
*
* @param context
*/
public static void fullScreenTransparent(Activity context) {
// 沉浸式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = context.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.TRANSPARENT);
}
}
/**
* 沉浸式-指定颜色
*
* @param context
*/
@TargetApi(19)
public static void **fullScreenColor**(Activity context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window win = context.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (true) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
SystemBarTintManager mTintManager = new SystemBarTintManager(context);
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setNavigationBarTintEnabled(true);
mTintManager.setTintColor(context.getResources().getColor(R.color.common_title));
}
}
/**
* 沉浸式-指定颜色
*
* @param context
*/
@TargetApi(19)
public static void fullScreenColor(Activity context, int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window win = context.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (true) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
SystemBarTintManager mTintManager = new SystemBarTintManager(context);
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setNavigationBarTintEnabled(true);
mTintManager.setTintColor(color);
}
}
/**
* 判断是否是平板
*
* @param context
* @return
*/
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
public static Uri parse(String url) {
if (TextUtils.isEmpty(url))
return null;
if (url.startsWith("/")) {
return Uri.fromFile(new File(url));
}
return Uri.parse(url);
}
/**
* Toast提示
*
* @param message
*/
public static void showToast(Context context, String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 获取本地相册缓存图片地址
*
* @return
*/
public static String getCachePath(Context context) {
File cacheDir;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
cacheDir = context.getExternalCacheDir();
else
cacheDir = context.getCacheDir();
if (!cacheDir.exists())
cacheDir.mkdirs();
return cacheDir.getAbsolutePath();
}
/**
* @return
* @Description: 获取当前屏幕1/4宽度
*/
public static int getQuarterWidth(Context context) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
return windowManager.getDefaultDisplay().getWidth() / 4;
}
/**
* 将content://media/external/images/media/162544格式的图片地址转换成path
*
* @return
*/
public static String urlToPath(Context context, String url) {
String picPath = null;
ContentResolver resolver = context.getContentResolver();
String[] pojo = {
MediaStore.Images.Media.DATA
};
Uri uri = Uri.parse(url);
CursorLoader cursorLoader = new CursorLoader(context, uri, pojo, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndex(pojo[0]));
if (path != null && path.length() > 0) {
picPath = path;
}
return picPath;
}
}
我一般是用的是 我在这里加粗的那个方法 同时在 使用这个方法的Activiity的布局中 引用 标签
android:fitsSystemWindows=“true” 同时在 color中 设置你想用的颜色.
这个方法是在 加载布局以后 initView 之前使用.
有疑问的 评论 即可.