編輯:關於Android編程
從實際使用需要出發,以最簡單的方式實現了幾種類型的MD狀態欄。(重點在fitsSystemWindows的使用)
0,使用前提
Theme.AppCompat.Light.DarkActionBar
targetSdkVersion 23;
support librariy 23.3.0
styles-v19:
styles-v21+:
1,最普通的類型:只有一個ToolBar
layout:
.java:
/**
* 簡單型狀態欄(ToolBar)
*
* @param activity
*/
public static void setOrdinaryToolBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, R.color.colorPrimaryDark));
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
setKKStatusBar(activity, R.color.colorPrimaryDark);
}
}
效果:
左:Android4.4 右:Android6.0


2,圖片全屏透明狀態欄(圖片位於狀態欄下面)
layout:
.java
/** * 圖片全屏透明狀態欄(圖片位於狀態欄下面) * * @param activity */ public static void setImageTransparent(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } }
效果:
左:Android4.4 右:Android6.0


3,圖片全屏半透明狀態欄(圖片位於狀態欄下面)
layout:
.java:
/**
* 圖片全屏半透明狀態欄(圖片位於狀態欄下面)
*
* @param activity
*/
public static void setImageTranslucent(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, R.color.statusBar));
} else {
setKKStatusBar(activity, R.color.statusBar);
}
}
效果:
左:Android4.4 右:Android6.0


4,ToolBar+TabLayout狀態欄(ToolBar可伸縮)
layout:
.java:
/**
* ToolBar+TabLayout狀態欄(ToolBar可伸縮)
*
* @param activity
*/
public static void setToolbarTabLayout(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, R.color.colorPrimaryDark));
}
}
效果:
Android4.4:


Android6.0:


5,DrawerLayout+ToolBar+TabLayout狀態欄(ToolBar可伸縮)
layout:
.java:
/**
* DrawerLayout+ToolBar+TabLayout狀態欄(ToolBar可伸縮)
*
* @param activity
* @param drawerLayout
* @param coordinatorLayout
*/
public static void setDrawerToolbarTabLayout(Activity activity, CoordinatorLayout coordinatorLayout) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
ViewGroup contentLayout = (ViewGroup) activity.findViewById(android.R.id.content);
contentLayout.getChildAt(0).setFitsSystemWindows(false);
coordinatorLayout.setFitsSystemWindows(true);
setKKStatusBar(activity, R.color.statusBar);
}
}
效果:
Android4.4:



Android6.0:



6,CollapsingToolbarLayout狀態欄(可折疊圖片)
layout:
.java:
/**
* CollapsingToolbarLayout狀態欄(可折疊圖片)
*
* @param activity
* @param coordinatorLayout
* @param appBarLayout
* @param imageView
* @param toolbar
*/
public static void setCollapsingToolbar(Activity activity, CoordinatorLayout coordinatorLayout,
AppBarLayout appBarLayout, ImageView imageView, Toolbar toolbar) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
coordinatorLayout.setFitsSystemWindows(false);
appBarLayout.setFitsSystemWindows(false);
imageView.setFitsSystemWindows(false);
toolbar.setFitsSystemWindows(true);
CollapsingToolbarLayout.LayoutParams lp = (CollapsingToolbarLayout.LayoutParams) toolbar.getLayoutParams();
lp.height = (int) (getStatusBarHeight(activity) +
activity.getResources().getDimension(R.dimen.abc_action_bar_default_height_material));
toolbar.setLayoutParams(lp);
setKKStatusBar(activity, R.color.statusBar);
setCollapsingToolbarStatus(appBarLayout);
}
}
效果:
Android4.4:


Android6.0:


7,DrawerLayout+ToolBar型狀態欄
layout:
.java:
/**
* DrawerLayout+ToolBar型狀態欄
*
* @param activity
*/
public static void setDrawerToolbar(Activity activity) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
ViewGroup contentLayout = (ViewGroup) activity.findViewById(android.R.id.content);
contentLayout.getChildAt(0).setFitsSystemWindows(false);
setKKStatusBar(activity, R.color.statusBar);
}
}
其它:
/**
* Android4.4上CollapsingToolbar折疊時statusBar顯示和隱藏
*
* @param appBarLayout
*/
private static void setCollapsingToolbarStatus(AppBarLayout appBarLayout) {
ViewCompat.setAlpha(mStatusBarView, 1);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
int maxScroll = appBarLayout.getTotalScrollRange();
float percentage = (float) Math.abs(verticalOffset) / (float) maxScroll;
ViewCompat.setAlpha(mStatusBarView, percentage);
}
});
}
private static void setKKStatusBar(Activity activity, int statusBarColor) {
ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
mStatusBarView = contentView.getChildAt(0);
//改變顏色時避免重復添加statusBarView
if (mStatusBarView != null && mStatusBarView.getMeasuredHeight() == getStatusBarHeight(activity)) {
mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));
return;
}
mStatusBarView = new View(activity);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));
contentView.addView(mStatusBarView, lp);
}
private static int getStatusBarHeight(Context context) {
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
return context.getResources().getDimensionPixelSize(resourceId);
}
效果:
Android4.4:


Android6.0:


天天看高清影視片庫無法連接 解決方案
天天看高清影視片庫無法連接,不知道為什麼老是連接不上,下面是我總結了一下為什麼會這樣的問題,看能不能在裡面找到你們所需要的,幫你們解決天天看高清影視出現的問
Android初級教程以動畫的形式彈出窗體
這一篇集合動畫知識和彈出窗體知識,綜合起來以動畫的形式彈出窗體。動畫的知識前幾篇已經做過詳細的介紹,可翻閱前面寫的有關動畫博文。先簡單介紹一下彈出窗體效果的方法:首先,需
Android學習個人筆記-百度地圖定位sdk的使用
雖然自己已經完成了百度地圖的調用,但是在使用過程中產生很多的疑問,在不斷的百度各種大神的作品後才慢慢的調試出來,所以覺得作為新手自己應該把這個過程記錄下來。尤其是自己在找
Android代碼混淆ProGuard工作原理簡介
ProGuard能夠對Java類中的代碼進行壓縮(Shrink),優化(Optimize),混淆(Obfuscate),預檢(Preveirfy)。 1. 壓縮(Sh