diff --git a/README.md b/README.md index ba95d9b..4bfc892 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ - 2.3.1+版本 (由于之前账户密码忘记,所以只能重新更改依赖路径) ```groovy - implementation 'com.gyf.immersionbar:immersionbar:2.3.2-beta02' + implementation 'com.gyf.immersionbar:immersionbar:2.3.2-beta03' ``` - 2.3.0以下版本 ```groovy @@ -18,7 +18,7 @@ >eclipse -[immersionbar-2.3.2-beta02.jar](https://github.com/gyf-dev/ImmersionBar/blob/master/jar/immersionbar-2.3.2-beta02.jar) +[immersionbar-2.3.2-beta03.jar](https://github.com/gyf-dev/ImmersionBar/blob/master/jar/immersionbar-2.3.2-beta03.jar) ## 版本说明 ### [点我](https://github.com/gyf-dev/ImmersionBar/wiki) @@ -106,20 +106,24 @@ ```java public class BaseActivity extends AppCompatActivity { - private ImmersionBar mImmersionBar; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mImmersionBar = ImmersionBar.with(this); - mImmersionBar.init(); //所有子类都将继承这些相同的属性 + ImmersionBar.with(this).init(); //所有子类都将继承这些相同的属性 } @Override protected void onDestroy() { super.onDestroy(); - if (mImmersionBar != null) - mImmersionBar.destroy(); //必须调用该方法,防止内存泄漏,不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态 + ImmersionBar.with(this).destroy(); //必须调用该方法,防止内存泄漏,不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态 + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // 如果你的app可以横竖屏切换,并且适配4.4或者emui3手机请务必在onConfigurationChanged方法里添加这句话 + ImmersionBar.with(this).init(); } } ``` @@ -138,8 +142,7 @@ @Override protected void onDestroy() { super.onDestroy(); - if (mImmersionBar != null) - mImmersionBar.destroy(); + ImmersionBar.with(this).destroy(); } ``` - 以show()和hide()方式控制Fragment显示隐藏,别忘了重写onHiddenChanged方法,如下 @@ -148,8 +151,8 @@ @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); - if (!hidden && mImmersionBar != null) - mImmersionBar.init(); + if (!hidden) + ImmersionBar.with(this).init(); } ``` - 在Activity使用ImmersionBar diff --git a/barlibrary/build.gradle b/barlibrary/build.gradle index b38947b..b8e3956 100644 --- a/barlibrary/build.gradle +++ b/barlibrary/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.library' apply plugin: 'com.novoda.bintray-release' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { - minSdkVersion 11 - targetSdkVersion 27 + minSdkVersion 14 + targetSdkVersion 28 versionCode 1 versionName "1.0" @@ -33,7 +33,7 @@ dependencies { androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:appcompat-v7:28.0.0' testImplementation 'junit:junit:4.12' } @@ -42,7 +42,7 @@ task makeJar(type: Copy) { from('build/intermediates/bundles/release/') into('build/libs/') include('classes.jar') - rename('classes.jar', 'immersionbar-2.3.2-beta02.jar') + rename('classes.jar', 'immersionbar-2.3.2-beta03.jar') } makeJar.dependsOn(build) @@ -51,7 +51,7 @@ publish { userOrg = 'geyifeng' groupId = 'com.gyf.immersionbar' artifactId = 'immersionbar' - publishVersion = '2.3.2-beta02' + publishVersion = '2.3.2-beta03' desc = 'Android bar management' website = 'https://github.com/gyf-dev/ImmersionBar' } diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/BarConfig.java b/barlibrary/src/main/java/com/gyf/barlibrary/BarConfig.java index 6b83892..1873bd7 100644 --- a/barlibrary/src/main/java/com/gyf/barlibrary/BarConfig.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/BarConfig.java @@ -35,7 +35,7 @@ class BarConfig { private final float mSmallestWidthDp; - public BarConfig(Activity activity) { + BarConfig(Activity activity) { Resources res = activity.getResources(); mInPortrait = (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT); mSmallestWidthDp = getSmallestWidthDp(activity); @@ -148,7 +148,7 @@ private float getSmallestWidthDp(Activity activity) { * * @return True if navigation should appear at the bottom of the screen, False otherwise. */ - public boolean isNavigationAtBottom() { + boolean isNavigationAtBottom() { return (mSmallestWidthDp >= 600 || mInPortrait); } @@ -157,7 +157,7 @@ public boolean isNavigationAtBottom() { * * @return The height of the status bar (in pixels). */ - public int getStatusBarHeight() { + int getStatusBarHeight() { return mStatusBarHeight; } @@ -166,7 +166,7 @@ public int getStatusBarHeight() { * * @return The height of the action bar (in pixels). */ - public int getActionBarHeight() { + int getActionBarHeight() { return mActionBarHeight; } @@ -175,7 +175,7 @@ public int getActionBarHeight() { * * @return True if this device uses soft key navigation, False otherwise. */ - public boolean hasNavigationBar() { + boolean hasNavigationBar() { return mHasNavigationBar; } @@ -185,7 +185,7 @@ public boolean hasNavigationBar() { * @return The height of the navigation bar (in pixels). If the device does not have * soft navigation keys, this will always return 0. */ - public int getNavigationBarHeight() { + int getNavigationBarHeight() { return mNavigationBarHeight; } @@ -195,7 +195,7 @@ public int getNavigationBarHeight() { * @return The width of the navigation bar (in pixels). If the device does not have * soft navigation keys, this will always return 0. */ - public int getNavigationBarWidth() { + int getNavigationBarWidth() { return mNavigationBarWidth; } diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/BarHide.java b/barlibrary/src/main/java/com/gyf/barlibrary/BarHide.java index 870626f..e5ebade 100644 --- a/barlibrary/src/main/java/com/gyf/barlibrary/BarHide.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/BarHide.java @@ -1,12 +1,30 @@ package com.gyf.barlibrary; /** - * Created by geyifeng on 2017/4/25. + * bar的状态 + * + * @author geyifeng + * @date 2017/4/25 */ - public enum BarHide { - FLAG_HIDE_STATUS_BAR, //隐藏状态栏 - FLAG_HIDE_NAVIGATION_BAR, //隐藏导航栏 - FLAG_HIDE_BAR, //隐藏状态栏和导航栏 - FLAG_SHOW_BAR //显示状态栏和导航栏 + /** + * 隐藏状态栏 + * Flag hide status bar bar hide. + */ + FLAG_HIDE_STATUS_BAR, + /** + * 隐藏导航栏 + * Flag hide navigation bar bar hide. + */ + FLAG_HIDE_NAVIGATION_BAR, + /** + * 隐藏状态栏和导航栏 + * Flag hide bar bar hide. + */ + FLAG_HIDE_BAR, + /** + * 显示状态栏和导航栏 + * Flag show bar bar hide. + */ + FLAG_SHOW_BAR } diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/BarParams.java b/barlibrary/src/main/java/com/gyf/barlibrary/BarParams.java index 5ab7935..01ecfbd 100644 --- a/barlibrary/src/main/java/com/gyf/barlibrary/BarParams.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/BarParams.java @@ -1,6 +1,5 @@ package com.gyf.barlibrary; -import android.database.ContentObserver; import android.graphics.Color; import android.support.annotation.ColorInt; import android.support.annotation.FloatRange; @@ -12,59 +11,171 @@ /** * 沉浸式参数信息 - * Created by geyifeng on 2017/5/9. + * + * @author geyifeng + * @date 2017/5/9 */ public class BarParams implements Cloneable { + /** + * 状态栏颜色 + * The Status bar color. + */ @ColorInt - public int statusBarColor = Color.TRANSPARENT; //状态栏颜色 + int statusBarColor = Color.TRANSPARENT; + /** + * 导航栏颜色 + * The Navigation bar color. + */ @ColorInt - public int navigationBarColor = Color.BLACK; //导航栏颜色 + int navigationBarColor = Color.BLACK; + + int defaultNavigationBarColor = Color.BLACK; + /** + * 状态栏透明度 + * The Status bar alpha. + */ @FloatRange(from = 0f, to = 1f) - public float statusBarAlpha = 0.0f; //状态栏透明度 + float statusBarAlpha = 0.0f; + /** + * 导航栏透明度 + * The Navigation bar alpha. + */ @FloatRange(from = 0f, to = 1f) - float navigationBarAlpha = 0.0f; //导航栏透明度 - public boolean fullScreen = false; //有导航栏的情况,全屏显示 - public boolean fullScreenTemp = fullScreen; - public BarHide barHide = BarHide.FLAG_SHOW_BAR; //隐藏Bar - public boolean darkFont = false; //状态栏字体深色与亮色标志位 - public boolean statusBarFlag = true; //是否可以修改状态栏颜色 + float navigationBarAlpha = 0.0f; + /** + * 有导航栏的情况,全屏显示 + * The Full screen. + */ + public boolean fullScreen = false; + /** + * 是否隐藏了导航栏 + * The Hide navigation bar. + */ + boolean hideNavigationBar = false; + /** + * 隐藏Bar + * The Bar hide. + */ + BarHide barHide = BarHide.FLAG_SHOW_BAR; + /** + * 状态栏字体深色与亮色标志位 + * The Dark font. + */ + boolean darkFont = false; + /** + * 是否可以修改状态栏颜色 + * The Status bar flag. + */ + boolean statusBarFlag = true; + /** + * 状态栏变换后的颜色 + * The Status bar color transform. + */ @ColorInt - public int statusBarColorTransform = Color.BLACK; //状态栏变换后的颜色 + int statusBarColorTransform = Color.BLACK; + /** + * 导航栏变换后的颜色 + * The Navigation bar color transform. + */ @ColorInt - public int navigationBarColorTransform = Color.BLACK; //导航栏变换后的颜色 - public Map> viewMap = new HashMap<>(); //支持view变色 + int navigationBarColorTransform = Color.BLACK; + /** + * 支持view变色 + * The View map. + */ + Map> viewMap = new HashMap<>(); + /** + * The View alpha. + */ @FloatRange(from = 0f, to = 1f) - public float viewAlpha = 0.0f; - public boolean fits = false; //解决标题栏与状态栏重叠问题 + float viewAlpha = 0.0f; + /** + * The Status bar color content view. + */ @ColorInt - public int statusBarColorContentView = Color.TRANSPARENT; + int contentColor = Color.TRANSPARENT; + /** + * The Status bar color content view transform. + */ @ColorInt - public int statusBarColorContentViewTransform = Color.BLACK; + int contentColorTransform = Color.BLACK; + /** + * The Status bar content view alpha. + */ @FloatRange(from = 0f, to = 1f) - public float statusBarContentViewAlpha = 0.0f; - public int navigationBarColorTemp = navigationBarColor; - public View statusBarView; //4.4自定义一个状态栏 - public View navigationBarView; //4.4自定义一个导航栏 - public View statusBarViewByHeight; //解决标题栏与状态栏重叠问题 + float contentAlpha = 0.0f; + /** + * The Navigation bar color temp. + */ + int navigationBarColorTemp = navigationBarColor; + /** + * 解决标题栏与状态栏重叠问题 + * The Fits. + */ + public boolean fits = false; + /** + * 解决标题栏与状态栏重叠问题 + * The Title bar view. + */ + View titleBarView; + /** + * 解决标题栏与状态栏重叠问题 + * The Status bar view by height. + */ + View statusBarView; + /** + * flymeOS状态栏字体变色 + * The Flyme os status bar font color. + */ @ColorInt - public int flymeOSStatusBarFontColor; //flymeOS状态栏字体变色 - public boolean isSupportActionBar = false; //结合actionBar使用 - public View titleBarView; //标题栏view - public int titleBarHeight; //标题栏的高度 - public int titleBarPaddingTopHeight; //标题栏的paddingTop高度 - public View titleBarViewMarginTop; //使用margin来修正标题栏位置 - public boolean titleBarViewMarginTopFlag = false; //标题栏标识,保证只执行一次 - public boolean keyboardEnable = false; //解决软键盘与输入框冲突问题 - public int keyboardMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN - | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; //软键盘属性 - public boolean navigationBarEnable = true; //是否能修改导航栏颜色 - public boolean navigationBarWithKitkatEnable = true; //是否能修改4.4手机导航栏颜色 + int flymeOSStatusBarFontColor; + /** + * 结合actionBar使用 + * The Is support action bar. + */ + boolean isSupportActionBar = false; + /** + * 解决软键盘与输入框冲突问题 + * The Keyboard enable. + */ + public boolean keyboardEnable = false; + /** + * 软键盘属性 + * The Keyboard mode. + */ + int keyboardMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN + | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + /** + * 是否能修改导航栏颜色 + * The Navigation bar enable. + */ + boolean navigationBarEnable = true; + /** + * 是否能修改4.4手机导航栏颜色 + * The Navigation bar with kitkat enable. + */ + boolean navigationBarWithKitkatEnable = true; + /** + * 解决出现底部多余导航栏高度,默认为false,已废弃 + * The Fix margin at bottom. + */ @Deprecated - public boolean fixMarginAtBottom = false; //解决出现底部多余导航栏高度,默认为false - public boolean systemWindows = false; //也没是否使用fitsSystemWindows属性 - public KeyboardPatch keyboardPatch; //软键盘监听类 - public OnKeyboardListener onKeyboardListener; //软键盘监听类 - public ContentObserver navigationStatusObserver; //emui3.1监听器 + boolean fixMarginAtBottom = false; + /** + * xml是否使用fitsSystemWindows属性 + * The System windows. + */ + boolean systemWindows = false; + /** + * 软键盘监听类 + * The Keyboard patch. + */ + KeyboardPatch keyboardPatch; + /** + * 软键盘监听类 + * The On keyboard listener. + */ + OnKeyboardListener onKeyboardListener; @Override protected BarParams clone() { diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/FlymeOSStatusBarFontUtils.java b/barlibrary/src/main/java/com/gyf/barlibrary/FlymeOSStatusBarFontUtils.java index fafd99d..19b22b5 100755 --- a/barlibrary/src/main/java/com/gyf/barlibrary/FlymeOSStatusBarFontUtils.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/FlymeOSStatusBarFontUtils.java @@ -12,7 +12,9 @@ /** * Flyme OS 修改状态栏字体颜色工具类 - * Created by gyf on 2017/05/30. + * + * @author gyf + * @date 2017 /05/30 */ public class FlymeOSStatusBarFontUtils { private static Method mSetStatusBarColorIcon; @@ -23,25 +25,25 @@ public class FlymeOSStatusBarFontUtils { static { try { mSetStatusBarColorIcon = Activity.class.getMethod("setStatusBarDarkIcon", int.class); - } catch (NoSuchMethodException e) { + } catch (NoSuchMethodException ignored) { } try { mSetStatusBarDarkIcon = Activity.class.getMethod("setStatusBarDarkIcon", boolean.class); - } catch (NoSuchMethodException e) { + } catch (NoSuchMethodException ignored) { } try { mStatusBarColorFiled = WindowManager.LayoutParams.class.getField("statusBarColor"); - } catch (NoSuchFieldException e) { + } catch (NoSuchFieldException ignored) { } try { Field field = View.class.getField("SYSTEM_UI_FLAG_LIGHT_STATUS_BAR"); SYSTEM_UI_FLAG_LIGHT_STATUS_BAR = field.getInt(null); - } catch (NoSuchFieldException e) { + } catch (NoSuchFieldException ignored) { - } catch (IllegalAccessException e) { + } catch (IllegalAccessException ignored) { } } @@ -51,7 +53,7 @@ public class FlymeOSStatusBarFontUtils { * * @param color 颜色 * @param level 级别 - * @return boolean + * @return boolean boolean */ public static boolean isBlackColor(int color, int level) { int grey = toGrey(color); @@ -206,10 +208,8 @@ public static void setStatusBarDarkIcon(Window window, boolean dark) { changeMeizuFlag(window.getAttributes(), "MEIZU_FLAG_DARK_STATUS_BAR_ICON", dark); } else { View decorView = window.getDecorView(); - if (decorView != null) { - setStatusBarDarkIcon(decorView, dark); - setStatusBarColor(window, 0); - } + setStatusBarDarkIcon(decorView, dark); + setStatusBarColor(window, 0); } } diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionBar.java b/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionBar.java index 0cc2f76..bd4b338 100644 --- a/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionBar.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionBar.java @@ -1,5 +1,6 @@ package com.gyf.barlibrary; +import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Activity; import android.app.Dialog; @@ -22,43 +23,92 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; -import android.view.ViewTreeObserver; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; +import java.util.Objects; import java.util.Set; /** * android 4.4以上沉浸式以及bar的管理 - * Created by gyf on 2017/05/09. + * + * @author gyf + * @date 2017 /05/09 */ @TargetApi(Build.VERSION_CODES.KITKAT) public class ImmersionBar { - private static Map mMap = new HashMap<>(); - private static Map mTagMap = new HashMap<>(); - private static Map> mTagKeyMap = new HashMap<>(); + private static final int IMMERSION_STATUS_BAR_VIEW = R.id.immersion_status_bar_view; + private static final int IMMERSION_NAVIGATION_BAR_VIEW = R.id.immersion_navigation_bar_view; + private static final String NAVIGATIONBAR_IS_MIN = "navigationbar_is_min"; + + private static final int FLAG_FITS_DEFAULT = 0X00; + private static final int FLAG_FITS_TITLE = 0X01; + private static final int FLAG_FITS_TITLE_MARGIN_TOP = 0X02; + private static final int FLAG_FITS_STATUS = 0X03; + private static final int FLAG_FITS_SYSTEM_WINDOWS = 0X04; + + /** + * 维护ImmersionBar的集合 + */ + private static Map mImmersionBarMap = new HashMap<>(); private Activity mActivity; + private Dialog mDialog; private Window mWindow; private ViewGroup mDecorView; private ViewGroup mContentView; - private Dialog mDialog; + /** + * 用户配置的bar参数 + */ private BarParams mBarParams; - private BarConfig mConfig; - - private String mActivityName; - private String mFragmentName; + /** + * 系统bar相关信息 + */ + private BarConfig mBarConfig; + /** + * 沉浸式名字 + */ private String mImmersionBarName; - - private static final String NAVIGATIONBAR_IS_MIN = "navigationbar_is_min"; + /** + * 导航栏的高度,适配Emui系统有用 + */ + private int mNavigationBarHeight = 0; + /** + * 导航栏的宽度,适配Emui系统有用 + */ + private int mNavigationBarWidth = 0; + /** + * 是否是在Activity使用的沉浸式 + */ + private boolean mIsActivity = true; + /** + * Emui系统导航栏监听器 + */ + private ContentObserver mNavigationObserver = null; + /** + * 用户使用tag增加的bar参数的集合 + */ + private Map mTagMap = new HashMap<>(); + /** + * 是否适配过布局与导航栏重叠了 + */ + private boolean mIsFitsLayoutOverlap = false; + /** + * 当前是以哪种方式适配的 + */ + private int mFitsStatusBarType = FLAG_FITS_DEFAULT; + /** + * 是否已经获取到当前导航栏颜色了 + */ + private boolean mHasNavigationBarColor = false; /** * 在Activit里初始化 @@ -69,9 +119,13 @@ public class ImmersionBar { private ImmersionBar(Activity activity) { mActivity = activity; mWindow = mActivity.getWindow(); - mActivityName = activity.toString(); - mImmersionBarName = mActivityName; - initParams(); + + mImmersionBarName = mActivity.toString(); + + mBarParams = new BarParams(); + + mDecorView = (ViewGroup) mWindow.getDecorView(); + mContentView = mDecorView.findViewById(android.R.id.content); } /** @@ -85,33 +139,58 @@ private ImmersionBar(Fragment fragment) { } private ImmersionBar(Activity activity, Fragment fragment) { - if (activity == null) { + + mActivity = activity; + if (mActivity == null) { throw new IllegalArgumentException("Activity不能为空!!!"); } - mActivity = activity; + if (mImmersionBarMap.get(mActivity.toString()) == null) { + throw new IllegalArgumentException("必须先在宿主Activity初始化"); + } + + mIsActivity = false; mWindow = mActivity.getWindow(); - mActivityName = mActivity.toString(); - mFragmentName = mActivityName + "_AND_" + fragment.toString(); - mImmersionBarName = mFragmentName; - initParams(); + + mImmersionBarName = activity.toString() + fragment.toString(); + + mBarParams = new BarParams(); + + mDecorView = (ViewGroup) mWindow.getDecorView(); + mContentView = mDecorView.findViewById(android.R.id.content); } + + /** + * 在dialogFragment里使用 + * Instantiates a new Immersion bar. + * + * @param dialogFragment the dialog fragment + */ private ImmersionBar(DialogFragment dialogFragment) { - mActivity = dialogFragment.getActivity(); - mDialog = dialogFragment.getDialog(); - mWindow = mDialog.getWindow(); - mActivityName = mActivity.toString(); - mImmersionBarName = mActivityName + "_AND_" + dialogFragment.toString(); - initParams(); + this(dialogFragment, dialogFragment.getDialog()); } private ImmersionBar(DialogFragment dialogFragment, Dialog dialog) { mActivity = dialogFragment.getActivity(); mDialog = dialog; + if (mActivity == null) { + throw new IllegalArgumentException("Activity不能为空!!!"); + } + if (mDialog == null) { + throw new IllegalArgumentException("DialogFragment中的dialog不能为空"); + } + if (mImmersionBarMap.get(mActivity.toString()) == null) { + throw new IllegalArgumentException("必须先在宿主Activity初始化"); + } + mWindow = mDialog.getWindow(); - mActivityName = mActivity.toString(); - mImmersionBarName = mActivityName + "_AND_" + dialog.toString(); - initParams(); + + mImmersionBarName = mActivity.toString() + dialogFragment.toString(); + + mBarParams = new BarParams(); + + mDecorView = (ViewGroup) mWindow.getDecorView(); + mContentView = mDecorView.findViewById(android.R.id.content); } /** @@ -122,12 +201,7 @@ private ImmersionBar(DialogFragment dialogFragment, Dialog dialog) { * @param dialog the dialog */ private ImmersionBar(Activity activity, Dialog dialog) { - mActivity = activity; - mDialog = dialog; - mWindow = mDialog.getWindow(); - mActivityName = mActivity.toString(); - mImmersionBarName = mActivityName + "_AND_" + dialog.toString(); - initParams(); + this(activity, dialog, ""); } /** @@ -141,36 +215,23 @@ private ImmersionBar(Activity activity, Dialog dialog) { private ImmersionBar(Activity activity, Dialog dialog, String dialogTag) { mActivity = activity; mDialog = dialog; + if (mActivity == null) { + throw new IllegalArgumentException("Activity不能为空!!!"); + } + if (mDialog == null) { + throw new IllegalArgumentException("dialog不能为空"); + } + if (mImmersionBarMap.get(mActivity.toString()) == null) { + throw new IllegalArgumentException("必须先在宿主Activity初始化"); + } + mWindow = mDialog.getWindow(); - mActivityName = mActivity.toString(); - mImmersionBarName = mActivityName + "_AND_" + dialogTag; - initParams(); - } + mImmersionBarName = activity.toString() + dialog.toString() + dialogTag; + + mBarParams = new BarParams(); - /** - * 初始化沉浸式默认参数 - * Init params. - */ - private void initParams() { mDecorView = (ViewGroup) mWindow.getDecorView(); mContentView = mDecorView.findViewById(android.R.id.content); - mConfig = new BarConfig(mActivity); - if (mMap.get(mImmersionBarName) == null) { - mBarParams = new BarParams(); - if (!isEmpty(mFragmentName)) { //保证一个activity页面有同一个状态栏view和导航栏view - if (mMap.get(mActivityName) == null) - throw new IllegalArgumentException("在Fragment里使用时,请先在加载Fragment的Activity里初始化!!!"); - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT - || OSUtils.isEMUI3_1()) { - mBarParams.statusBarView = mMap.get(mActivityName).statusBarView; - mBarParams.navigationBarView = mMap.get(mActivityName).navigationBarView; - } - mBarParams.keyboardPatch = mMap.get(mActivityName).keyboardPatch; - } - mMap.put(mImmersionBarName, mBarParams); - } else { - mBarParams = mMap.get(mImmersionBarName); - } } /** @@ -181,7 +242,12 @@ private void initParams() { * @return the immersion bar */ public static ImmersionBar with(@NonNull Activity activity) { - return new ImmersionBar(activity); + ImmersionBar immersionBar = mImmersionBarMap.get(activity.toString()); + if (immersionBar == null) { + immersionBar = new ImmersionBar(activity); + mImmersionBarMap.put(activity.toString(), immersionBar); + } + return immersionBar; } /** @@ -192,11 +258,32 @@ public static ImmersionBar with(@NonNull Activity activity) { * @return the immersion bar */ public static ImmersionBar with(@NonNull Fragment fragment) { - return new ImmersionBar(fragment); + if (fragment.getActivity() == null) { + throw new IllegalArgumentException("Activity不能为空!!!"); + } + ImmersionBar immersionBar = mImmersionBarMap.get(fragment.getActivity().toString() + fragment.toString()); + if (immersionBar == null) { + immersionBar = new ImmersionBar(fragment); + mImmersionBarMap.put(fragment.getActivity().toString() + fragment.toString(), immersionBar); + } + return immersionBar; } + /** + * With immersion bar. + * + * @param activity the activity + * @param fragment the fragment + * @return the immersion bar + * @deprecated 请使用ImmersionBar with(@NonNull Fragment fragment) + */ public static ImmersionBar with(@NonNull Activity activity, @NonNull Fragment fragment) { - return new ImmersionBar(activity, fragment); + ImmersionBar immersionBar = mImmersionBarMap.get(activity.toString() + fragment.toString()); + if (immersionBar == null) { + immersionBar = new ImmersionBar(activity, fragment); + mImmersionBarMap.put(activity.toString() + fragment.toString(), immersionBar); + } + return immersionBar; } @@ -208,7 +295,15 @@ public static ImmersionBar with(@NonNull Activity activity, @NonNull Fragment fr * @return the immersion bar */ public static ImmersionBar with(@NonNull DialogFragment dialogFragment) { - return new ImmersionBar(dialogFragment); + if (dialogFragment.getActivity() == null) { + throw new IllegalArgumentException("Activity不能为空!!!"); + } + ImmersionBar immersionBar = mImmersionBarMap.get(dialogFragment.getActivity().toString() + dialogFragment.toString()); + if (immersionBar == null) { + immersionBar = new ImmersionBar(dialogFragment); + mImmersionBarMap.put(dialogFragment.getActivity().toString() + dialogFragment.toString(), immersionBar); + } + return immersionBar; } /** @@ -221,7 +316,15 @@ public static ImmersionBar with(@NonNull DialogFragment dialogFragment) { */ @Deprecated public static ImmersionBar with(@NonNull DialogFragment dialogFragment, @NonNull Dialog dialog) { - return new ImmersionBar(dialogFragment, dialog); + if (dialogFragment.getActivity() == null) { + throw new IllegalArgumentException("Activity不能为空!!!"); + } + ImmersionBar immersionBar = mImmersionBarMap.get(dialogFragment.getActivity().toString() + dialogFragment.toString()); + if (immersionBar == null) { + immersionBar = new ImmersionBar(dialogFragment, dialog); + mImmersionBarMap.put(dialogFragment.getActivity().toString() + dialogFragment.toString(), immersionBar); + } + return immersionBar; } /** @@ -233,7 +336,12 @@ public static ImmersionBar with(@NonNull DialogFragment dialogFragment, @NonNull * @return the immersion bar */ public static ImmersionBar with(@NonNull Activity activity, @NonNull Dialog dialog) { - return new ImmersionBar(activity, dialog); + ImmersionBar immersionBar = mImmersionBarMap.get(activity.toString() + dialog.toString()); + if (immersionBar == null) { + immersionBar = new ImmersionBar(activity, dialog); + mImmersionBarMap.put(activity.toString() + dialog.toString(), immersionBar); + } + return immersionBar; } /** @@ -248,9 +356,12 @@ public static ImmersionBar with(@NonNull Activity activity, @NonNull Dialog dial */ @Deprecated public static ImmersionBar with(@NonNull Activity activity, @NonNull Dialog dialog, @NonNull String dialogTag) { - if (isEmpty(dialogTag)) - throw new IllegalArgumentException("tag不能为null或空"); - return new ImmersionBar(activity, dialog, dialogTag); + ImmersionBar immersionBar = mImmersionBarMap.get(activity.toString() + dialog.toString() + dialogTag); + if (immersionBar == null) { + immersionBar = new ImmersionBar(activity, dialog, dialogTag); + mImmersionBarMap.put(activity.toString() + dialog.toString() + dialogTag, immersionBar); + } + return immersionBar; } /** @@ -948,8 +1059,9 @@ public ImmersionBar statusBarDarkFont(boolean isDarkFont) { */ public ImmersionBar statusBarDarkFont(boolean isDarkFont, @FloatRange(from = 0f, to = 1f) float statusAlpha) { mBarParams.darkFont = isDarkFont; - if (!isDarkFont) + if (!isDarkFont) { mBarParams.flymeOSStatusBarFontColor = 0; + } if (isSupportStatusBarDarkFont()) { mBarParams.statusBarAlpha = 0; } else { @@ -1005,11 +1117,9 @@ public ImmersionBar hideBar(BarHide barHide) { if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || OSUtils.isEMUI3_1()) { if ((mBarParams.barHide == BarHide.FLAG_HIDE_NAVIGATION_BAR) || (mBarParams.barHide == BarHide.FLAG_HIDE_BAR)) { - mBarParams.navigationBarColor = Color.TRANSPARENT; - mBarParams.fullScreenTemp = true; + mBarParams.hideNavigationBar = true; } else { - mBarParams.navigationBarColor = mBarParams.navigationBarColorTemp; - mBarParams.fullScreenTemp = false; + mBarParams.hideNavigationBar = false; } } return this; @@ -1023,6 +1133,13 @@ public ImmersionBar hideBar(BarHide barHide) { */ public ImmersionBar fitsSystemWindows(boolean fits) { mBarParams.fits = fits; + if (mBarParams.fits) { + if (mFitsStatusBarType == FLAG_FITS_DEFAULT) { + mFitsStatusBarType = FLAG_FITS_SYSTEM_WINDOWS; + } + } else { + mFitsStatusBarType = FLAG_FITS_DEFAULT; + } return this; } @@ -1030,34 +1147,67 @@ public ImmersionBar fitsSystemWindows(boolean fits) { * 解决布局与状态栏重叠问题,支持侧滑返回 * Fits system windows immersion bar. * - * @param fits the fits - * @param statusBarColorContentView the status bar color content view 状态栏颜色 + * @param fits the fits + * @param contentColor the content color 整体界面背景色 * @return the immersion bar */ - public ImmersionBar fitsSystemWindows(boolean fits, @ColorRes int statusBarColorContentView) { - return fitsSystemWindows(fits, statusBarColorContentView, - android.R.color.black, 0); + public ImmersionBar fitsSystemWindows(boolean fits, @ColorRes int contentColor) { + return fitsSystemWindowsInt(fits, ContextCompat.getColor(mActivity, contentColor)); } /** * 解决布局与状态栏重叠问题,支持侧滑返回 * Fits system windows immersion bar. * - * @param fits the fits - * @param statusBarColorContentView the status bar color content view 状态栏颜色 - * @param statusBarColorContentViewTransform the status bar color content view transform 状态栏变色后的颜色 - * @param statusBarContentViewAlpha the status bar content view alpha 透明度 + * @param fits the fits + * @param contentColor the content color 整体界面背景色 + * @param contentColorTransform the content color transform 整体界面变换后的背景色 + * @param contentAlpha the content alpha 整体界面透明度 * @return the immersion bar */ - public ImmersionBar fitsSystemWindows(boolean fits, @ColorRes int statusBarColorContentView - , @ColorRes int statusBarColorContentViewTransform, @FloatRange(from = 0f, to = 1f) float statusBarContentViewAlpha) { + public ImmersionBar fitsSystemWindows(boolean fits, @ColorRes int contentColor + , @ColorRes int contentColorTransform, @FloatRange(from = 0f, to = 1f) float contentAlpha) { + return fitsSystemWindowsInt(fits, ContextCompat.getColor(mActivity, contentColor), + ContextCompat.getColor(mActivity, contentColorTransform), contentAlpha); + } + + /** + * 解决布局与状态栏重叠问题,支持侧滑返回 + * Fits system windows int immersion bar. + * + * @param fits the fits + * @param contentColor the content color 整体界面背景色 + * @return the immersion bar + */ + public ImmersionBar fitsSystemWindowsInt(boolean fits, @ColorInt int contentColor) { + return fitsSystemWindowsInt(fits, contentColor, Color.BLACK, 0); + } + + /** + * 解决布局与状态栏重叠问题,支持侧滑返回 + * Fits system windows int immersion bar. + * + * @param fits the fits + * @param contentColor the content color 整体界面背景色 + * @param contentColorTransform the content color transform 整体界面变换后的背景色 + * @param contentAlpha the content alpha 整体界面透明度 + * @return the immersion bar + */ + public ImmersionBar fitsSystemWindowsInt(boolean fits, @ColorInt int contentColor + , @ColorInt int contentColorTransform, @FloatRange(from = 0f, to = 1f) float contentAlpha) { mBarParams.fits = fits; - mBarParams.statusBarColorContentView = ContextCompat.getColor(mActivity, statusBarColorContentView); - mBarParams.statusBarColorContentViewTransform = ContextCompat.getColor(mActivity, statusBarColorContentViewTransform); - mBarParams.statusBarContentViewAlpha = statusBarContentViewAlpha; - mBarParams.statusBarColorContentView = ContextCompat.getColor(mActivity, statusBarColorContentView); - mContentView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.statusBarColorContentView, - mBarParams.statusBarColorContentViewTransform, mBarParams.statusBarContentViewAlpha)); + mBarParams.contentColor = contentColor; + mBarParams.contentColorTransform = contentColorTransform; + mBarParams.contentAlpha = contentAlpha; + if (mBarParams.fits) { + if (mFitsStatusBarType == FLAG_FITS_DEFAULT) { + mFitsStatusBarType = FLAG_FITS_SYSTEM_WINDOWS; + } + } else { + mFitsStatusBarType = FLAG_FITS_DEFAULT; + } + mContentView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.contentColor, + mBarParams.contentColorTransform, mBarParams.contentAlpha)); return this; } @@ -1069,9 +1219,12 @@ public ImmersionBar fitsSystemWindows(boolean fits, @ColorRes int statusBarColor */ public ImmersionBar statusBarView(View view) { if (view == null) { - throw new IllegalArgumentException("View参数不能为空"); + return this; + } + mBarParams.statusBarView = view; + if (mFitsStatusBarType == FLAG_FITS_DEFAULT) { + mFitsStatusBarType = FLAG_FITS_STATUS; } - mBarParams.statusBarViewByHeight = view; return this; } @@ -1082,11 +1235,7 @@ public ImmersionBar statusBarView(View view) { * @return the immersion bar */ public ImmersionBar statusBarView(@IdRes int viewId) { - View view = mActivity.findViewById(viewId); - if (view == null) { - throw new IllegalArgumentException("未找到viewId"); - } - return statusBarView(view); + return statusBarView(mActivity.findViewById(viewId)); } /** @@ -1098,11 +1247,7 @@ public ImmersionBar statusBarView(@IdRes int viewId) { * @return the immersion bar */ public ImmersionBar statusBarView(@IdRes int viewId, View rootView) { - View view = rootView.findViewById(viewId); - if (view == null) { - throw new IllegalArgumentException("未找到viewId"); - } - return statusBarView(view); + return statusBarView(rootView.findViewById(viewId)); } /** @@ -1126,7 +1271,7 @@ public ImmersionBar supportActionBar(boolean isSupportActionBar) { */ public ImmersionBar titleBar(View view) { if (view == null) { - throw new IllegalArgumentException("View参数不能为空"); + return this; } return titleBar(view, true); } @@ -1141,11 +1286,13 @@ public ImmersionBar titleBar(View view) { */ public ImmersionBar titleBar(View view, boolean statusBarFlag) { if (view == null) { - throw new IllegalArgumentException("View参数不能为空"); + return this; + } + if (mFitsStatusBarType == FLAG_FITS_DEFAULT) { + mFitsStatusBarType = FLAG_FITS_TITLE; } mBarParams.titleBarView = view; mBarParams.statusBarFlag = statusBarFlag; - setTitleBar(); return this; } @@ -1157,11 +1304,7 @@ public ImmersionBar titleBar(View view, boolean statusBarFlag) { * @return the immersion bar */ public ImmersionBar titleBar(@IdRes int viewId) { - View view = mActivity.findViewById(viewId); - if (view == null) { - throw new IllegalArgumentException("参数错误"); - } - return titleBar(view, true); + return titleBar(mActivity.findViewById(viewId), true); } /** @@ -1172,11 +1315,7 @@ public ImmersionBar titleBar(@IdRes int viewId) { * @return the immersion bar */ public ImmersionBar titleBar(@IdRes int viewId, boolean statusBarFlag) { - View view = mActivity.findViewById(viewId); - if (view == null) { - throw new IllegalArgumentException("参数错误"); - } - return titleBar(view, statusBarFlag); + return titleBar(mActivity.findViewById(viewId), statusBarFlag); } /** @@ -1187,11 +1326,7 @@ public ImmersionBar titleBar(@IdRes int viewId, boolean statusBarFlag) { * @return the immersion bar */ public ImmersionBar titleBar(@IdRes int viewId, View rootView) { - View view = rootView.findViewById(viewId); - if (view == null) { - throw new IllegalArgumentException("参数错误"); - } - return titleBar(view, true); + return titleBar(rootView.findViewById(viewId), true); } /** @@ -1204,11 +1339,7 @@ public ImmersionBar titleBar(@IdRes int viewId, View rootView) { * @return the immersion bar */ public ImmersionBar titleBar(@IdRes int viewId, View rootView, boolean statusBarFlag) { - View view = rootView.findViewById(viewId); - if (view == null) { - throw new IllegalArgumentException("参数错误"); - } - return titleBar(view, statusBarFlag); + return titleBar(rootView.findViewById(viewId), statusBarFlag); } /** @@ -1243,11 +1374,12 @@ public ImmersionBar titleBarMarginTop(@IdRes int viewId, View rootView) { */ public ImmersionBar titleBarMarginTop(View view) { if (view == null) { - throw new IllegalArgumentException("参数错误"); + return this; + } + if (mFitsStatusBarType == FLAG_FITS_DEFAULT) { + mFitsStatusBarType = FLAG_FITS_TITLE_MARGIN_TOP; } - mBarParams.titleBarViewMarginTop = view; - if (!mBarParams.titleBarViewMarginTopFlag) - setTitleBarMarginTop(); + mBarParams.titleBarView = view; return this; } @@ -1269,14 +1401,7 @@ public ImmersionBar statusBarColorTransformEnable(boolean statusBarFlag) { * @return the immersion bar */ public ImmersionBar reset() { - BarParams barParamsTemp = mBarParams; mBarParams = new BarParams(); - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || OSUtils.isEMUI3_1()) { - mBarParams.statusBarView = barParamsTemp.statusBarView; - mBarParams.navigationBarView = barParamsTemp.navigationBarView; - } - mBarParams.keyboardPatch = barParamsTemp.keyboardPatch; - mMap.put(mImmersionBarName, mBarParams); return this; } @@ -1288,20 +1413,11 @@ public ImmersionBar reset() { * @return the bar tag */ public ImmersionBar addTag(String tag) { - tag = mActivityName + "_TAG_" + tag; - if (!isEmpty(tag)) { - BarParams barParams = mBarParams.clone(); - mTagMap.put(tag, barParams); - ArrayList tagList = mTagKeyMap.get(mActivityName); - if (tagList != null) { - if (!tagList.contains(tag)) - tagList.add(tag); - } else { - tagList = new ArrayList<>(); - tagList.add(tag); - } - mTagKeyMap.put(mActivityName, tagList); + if (isEmpty(tag)) { + throw new IllegalArgumentException("tag不能为空"); } + BarParams barParams = mBarParams.clone(); + mTagMap.put(tag, barParams); return this; } @@ -1313,11 +1429,12 @@ public ImmersionBar addTag(String tag) { * @return the immersion bar */ public ImmersionBar getTag(String tag) { - if (!isEmpty(tag)) { - BarParams barParams = mTagMap.get(mActivityName + "_TAG_" + tag); - if (barParams != null) { - mBarParams = barParams.clone(); - } + if (isEmpty(tag)) { + throw new IllegalArgumentException("tag不能为空"); + } + BarParams barParams = mTagMap.get(tag); + if (barParams != null) { + mBarParams = barParams.clone(); } return this; } @@ -1367,8 +1484,9 @@ public ImmersionBar keyboardMode(int keyboardMode) { * @return the on keyboard listener */ public ImmersionBar setOnKeyboardListener(OnKeyboardListener onKeyboardListener) { - if (mBarParams.onKeyboardListener == null) + if (mBarParams.onKeyboardListener == null) { mBarParams.onKeyboardListener = onKeyboardListener; + } return this; } @@ -1402,6 +1520,7 @@ public ImmersionBar navigationBarWithKitkatEnable(boolean navigationBarWithKitka * * @param fixMarginAtBottom the fix margin atbottom * @return the immersion bar + * @deprecated */ @Deprecated public ImmersionBar fixMarginAtBottom(boolean fixMarginAtBottom) { @@ -1413,12 +1532,14 @@ public ImmersionBar fixMarginAtBottom(boolean fixMarginAtBottom) { * 通过上面配置后初始化后方可成功调用 */ public void init() { - mMap.put(mImmersionBarName, mBarParams); - initBar(); //初始化沉浸式 - setStatusBarView(); //通过状态栏高度动态设置状态栏布局 - transformView(); //变色view - keyboardEnable(); //解决软键盘与底部输入框冲突问题 - registerEMUI3_x(); //解决华为emui3.1或者3.0导航栏手动隐藏的问题 + //设置沉浸式 + setBar(); + //适配状态栏与布局重叠问题 + fitsLayoutOverlap(); + //变色view + transformView(); + //解决软键盘与底部输入框冲突问题 + keyboardEnable(); } /** @@ -1427,60 +1548,63 @@ public void init() { public void destroy() { unRegisterEMUI3_x(); if (mBarParams.keyboardPatch != null) { - mBarParams.keyboardPatch.disable(mBarParams.keyboardMode); //取消监听 + //取消监听 + mBarParams.keyboardPatch.disable(mBarParams.keyboardMode); mBarParams.keyboardPatch = null; } - if (mDecorView != null) - mDecorView = null; - if (mContentView != null) - mContentView = null; - if (mConfig != null) - mConfig = null; - if (mWindow != null) - mWindow = null; - if (mDialog != null) - mDialog = null; - if (mActivity != null) - mActivity = null; - if (!isEmpty(mImmersionBarName)) { - if (mBarParams != null) - mBarParams = null; - ArrayList tagList = mTagKeyMap.get(mActivityName); - if (tagList != null && tagList.size() > 0) { - for (String tag : tagList) { - mTagMap.remove(tag); - } - mTagKeyMap.remove(mActivityName); + //删除当前界面对应的ImmersionBar对象 + Iterator> iterator = mImmersionBarMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (entry.getKey().contains(mImmersionBarName) || (entry.getKey().equals(mImmersionBarName))) { + iterator.remove(); } - mMap.remove(mImmersionBarName); } } /** * 初始化状态栏和导航栏 */ - private void initBar() { + private void setBar() { + //获得Bar相关信息 + mBarConfig = new BarConfig(mActivity); + //如果是非Activity中使用,让Activity同步非Activity的BarParams的导航栏参数 + if (!mIsActivity) { + Objects.requireNonNull(mImmersionBarMap.get(mActivity.toString())).mBarParams.navigationBarEnable + = mBarParams.navigationBarEnable; + Objects.requireNonNull(mImmersionBarMap.get(mActivity.toString())).mBarParams.navigationBarWithKitkatEnable + = mBarParams.navigationBarWithKitkatEnable; + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE; //防止系统栏隐藏时内容区域大小发生变化 + //防止系统栏隐藏时内容区域大小发生变化 + int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !OSUtils.isEMUI3_1()) { - uiFlags = initBarAboveLOLLIPOP(uiFlags); //初始化5.0以上,包含5.0 - uiFlags = setStatusBarDarkFont(uiFlags); //android 6.0以上设置状态栏字体为暗色 - supportActionBar(); + //初始化5.0以上,包含5.0 + uiFlags = initBarAboveLOLLIPOP(uiFlags); + //android 6.0以上设置状态栏字体为暗色 + uiFlags = setStatusBarDarkFont(uiFlags); } else { - initBarBelowLOLLIPOP(); //初始化5.0以下,4.4以上沉浸式 - solveNavigation(); //解决android4.4有导航栏的情况下,activity底部被导航栏遮挡的问题和android 5.0以下解决状态栏和布局重叠问题 + //初始化5.0以下,4.4以上沉浸式 + initBarBelowLOLLIPOP(); } - uiFlags = hideBar(uiFlags); //隐藏状态栏或者导航栏 + //隐藏状态栏或者导航栏 + uiFlags = hideBar(uiFlags); + //修正界面显示 + fitsWindows(); mWindow.getDecorView().setSystemUiVisibility(uiFlags); } - if (OSUtils.isMIUI6Later()) - setMIUIStatusBarDarkFont(mWindow, mBarParams.darkFont); //修改miui状态栏字体颜色 - if (OSUtils.isFlymeOS4Later()) { // 修改Flyme OS状态栏字体颜色 + //修改miui状态栏字体颜色 + if (OSUtils.isMIUI6Later()) { + setMIUIStatusBarDarkFont(mWindow, mBarParams.darkFont); + } + // 修改Flyme OS状态栏字体颜色 + if (OSUtils.isFlymeOS4Later()) { if (mBarParams.flymeOSStatusBarFontColor != 0) { FlymeOSStatusBarFontUtils.setStatusBarDarkIcon(mActivity, mBarParams.flymeOSStatusBarFontColor); } else { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { FlymeOSStatusBarFontUtils.setStatusBarDarkIcon(mActivity, mBarParams.darkFont); + } } } } @@ -1493,24 +1617,39 @@ private void initBar() { */ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private int initBarAboveLOLLIPOP(int uiFlags) { - uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; //Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态栏遮住。 + //获得默认导航栏颜色 + if (!mHasNavigationBarColor) { + mBarParams.defaultNavigationBarColor = mWindow.getNavigationBarColor(); + mHasNavigationBarColor = true; + } + //Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态栏遮住。 + uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; if (mBarParams.fullScreen && mBarParams.navigationBarEnable) { - uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; //Activity全屏显示,但导航栏不会被隐藏覆盖,导航栏依然可见,Activity底部布局部分会被导航栏遮住。 + //Activity全屏显示,但导航栏不会被隐藏覆盖,导航栏依然可见,Activity底部布局部分会被导航栏遮住。 + uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; } mWindow.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - if (mConfig.hasNavigationBar()) { //判断是否存在导航栏 + //判断是否存在导航栏 + if (mBarConfig.hasNavigationBar()) { mWindow.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } - mWindow.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); //需要设置这个才能设置状态栏颜色 - if (mBarParams.statusBarFlag) + //需要设置这个才能设置状态栏和导航栏颜色 + mWindow.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + //设置状态栏颜色 + if (mBarParams.statusBarFlag) { mWindow.setStatusBarColor(ColorUtils.blendARGB(mBarParams.statusBarColor, - mBarParams.statusBarColorTransform, mBarParams.statusBarAlpha)); //设置状态栏颜色 - else + mBarParams.statusBarColorTransform, mBarParams.statusBarAlpha)); + } else { mWindow.setStatusBarColor(ColorUtils.blendARGB(mBarParams.statusBarColor, - Color.TRANSPARENT, mBarParams.statusBarAlpha)); //设置状态栏颜色 - if (mBarParams.navigationBarEnable) + Color.TRANSPARENT, mBarParams.statusBarAlpha)); + } + //设置导航栏颜色 + if (mBarParams.navigationBarEnable) { mWindow.setNavigationBarColor(ColorUtils.blendARGB(mBarParams.navigationBarColor, - mBarParams.navigationBarColorTransform, mBarParams.navigationBarAlpha)); //设置导航栏颜色 + mBarParams.navigationBarColorTransform, mBarParams.navigationBarAlpha)); + } else { + mWindow.setNavigationBarColor(mBarParams.defaultNavigationBarColor); + } return uiFlags; } @@ -1518,14 +1657,26 @@ private int initBarAboveLOLLIPOP(int uiFlags) { * 初始化android 4.4和emui3.1状态栏和导航栏 */ private void initBarBelowLOLLIPOP() { - mWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明状态栏 - setupStatusBarView(); //创建一个假的状态栏 - if (mConfig.hasNavigationBar()) { //判断是否存在导航栏,是否禁止设置导航栏 - if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) - mWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//透明导航栏,设置这个,如果有导航栏,底部布局会被导航栏遮住 - else + //透明状态栏 + mWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + //创建一个假的状态栏 + setupStatusBarView(); + //判断是否存在导航栏,是否禁止设置导航栏 + if (mBarConfig.hasNavigationBar() || OSUtils.isEMUI3_1() || OSUtils.isEMUI3_0()) { + if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { + //透明导航栏,设置这个,如果有导航栏,底部布局会被导航栏遮住 + mWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + } else { mWindow.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); - setupNavBarView(); //创建一个假的导航栏 + } + if (mNavigationBarHeight == 0) { + mNavigationBarHeight = mBarConfig.getNavigationBarHeight(); + } + if (mNavigationBarWidth == 0) { + mNavigationBarWidth = mBarConfig.getNavigationBarWidth(); + } + //创建一个假的导航栏 + setupNavBarView(); } } @@ -1533,246 +1684,317 @@ private void initBarBelowLOLLIPOP() { * 设置一个可以自定义颜色的状态栏 */ private void setupStatusBarView() { - if (mBarParams.statusBarView == null) { - mBarParams.statusBarView = new View(mActivity); - } - FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, - mConfig.getStatusBarHeight()); - params.gravity = Gravity.TOP; - mBarParams.statusBarView.setLayoutParams(params); - if (mBarParams.statusBarFlag) - mBarParams.statusBarView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.statusBarColor, + View statusBarView = mDecorView.findViewById(IMMERSION_STATUS_BAR_VIEW); + if (statusBarView == null) { + statusBarView = new View(mActivity); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, + mBarConfig.getStatusBarHeight()); + params.gravity = Gravity.TOP; + statusBarView.setLayoutParams(params); + statusBarView.setVisibility(View.VISIBLE); + statusBarView.setId(IMMERSION_STATUS_BAR_VIEW); + mDecorView.addView(statusBarView); + } + if (mBarParams.statusBarFlag) { + statusBarView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.statusBarColor, mBarParams.statusBarColorTransform, mBarParams.statusBarAlpha)); - else - mBarParams.statusBarView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.statusBarColor, + } else { + statusBarView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.statusBarColor, Color.TRANSPARENT, mBarParams.statusBarAlpha)); - mBarParams.statusBarView.setVisibility(View.VISIBLE); - ViewGroup viewGroup = (ViewGroup) mBarParams.statusBarView.getParent(); - if (viewGroup != null) - viewGroup.removeView(mBarParams.statusBarView); - mDecorView.addView(mBarParams.statusBarView); + } } /** * 设置一个可以自定义颜色的导航栏 */ private void setupNavBarView() { - if (mBarParams.navigationBarView == null) { - mBarParams.navigationBarView = new View(mActivity); + View navigationBarView = mDecorView.findViewById(IMMERSION_NAVIGATION_BAR_VIEW); + if (navigationBarView == null) { + navigationBarView = new View(mActivity); + navigationBarView.setId(IMMERSION_NAVIGATION_BAR_VIEW); + mDecorView.addView(navigationBarView); } + FrameLayout.LayoutParams params; - if (mConfig.isNavigationAtBottom()) { - params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, mConfig.getNavigationBarHeight()); + if (mBarConfig.isNavigationAtBottom()) { + params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, mBarConfig.getNavigationBarHeight()); params.gravity = Gravity.BOTTOM; } else { - params = new FrameLayout.LayoutParams(mConfig.getNavigationBarWidth(), FrameLayout.LayoutParams.MATCH_PARENT); + params = new FrameLayout.LayoutParams(mBarConfig.getNavigationBarWidth(), FrameLayout.LayoutParams.MATCH_PARENT); params.gravity = Gravity.END; } - mBarParams.navigationBarView.setLayoutParams(params); - if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { - if (!mBarParams.fullScreen && (mBarParams.navigationBarColorTransform == Color.TRANSPARENT)) { - mBarParams.navigationBarView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.navigationBarColor, - Color.BLACK, mBarParams.navigationBarAlpha)); - } else { - mBarParams.navigationBarView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.navigationBarColor, - mBarParams.navigationBarColorTransform, mBarParams.navigationBarAlpha)); + navigationBarView.setLayoutParams(params); + navigationBarView.setBackgroundColor(ColorUtils.blendARGB(mBarParams.navigationBarColor, + mBarParams.navigationBarColorTransform, mBarParams.navigationBarAlpha)); + + if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable && !mBarParams.hideNavigationBar) { + navigationBarView.setVisibility(View.VISIBLE); + } else { + navigationBarView.setVisibility(View.GONE); + } + } + + /** + * Hide bar. + * 隐藏或显示状态栏和导航栏。 + * + * @param uiFlags the ui flags + * @return the int + */ + private int hideBar(int uiFlags) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + switch (mBarParams.barHide) { + case FLAG_HIDE_BAR: + uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.INVISIBLE; + break; + case FLAG_HIDE_STATUS_BAR: + uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.INVISIBLE; + break; + case FLAG_HIDE_NAVIGATION_BAR: + uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + break; + case FLAG_SHOW_BAR: + uiFlags |= View.SYSTEM_UI_FLAG_VISIBLE; + break; + default: + break; } - } else - mBarParams.navigationBarView.setBackgroundColor(Color.TRANSPARENT); - mBarParams.navigationBarView.setVisibility(View.VISIBLE); - ViewGroup viewGroup = (ViewGroup) mBarParams.navigationBarView.getParent(); - if (viewGroup != null) - viewGroup.removeView(mBarParams.navigationBarView); - mDecorView.addView(mBarParams.navigationBarView); + } + return uiFlags | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } /** - * 解决安卓4.4和EMUI3.1导航栏与状态栏的问题,以及系统属性fitsSystemWindows的坑 + * 修正界面显示 */ - private void solveNavigation() { + private void fitsWindows() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !OSUtils.isEMUI3_1()) { + //android 5.0以上解决状态栏和布局重叠问题 + fitsWindowsAboveLOLLIPOP(); + } else { + //解决android4.4有导航栏的情况下,activity底部被导航栏遮挡的问题和android 5.0以下解决状态栏和布局重叠问题 + fitsWindowsBelowLOLLIPOP(); + //解决华为emui3.1或者3.0导航栏手动隐藏的问题 + if (mIsActivity && ((OSUtils.isEMUI3_0() || OSUtils.isEMUI3_1()))) { + fitsWindowsEMUI(); + } + } + } + + /** + * android 5.0以上解决状态栏和布局重叠问题 + * Fits windows above lollipop. + */ + private void fitsWindowsAboveLOLLIPOP() { + int top = 0; for (int i = 0, count = mContentView.getChildCount(); i < count; i++) { View childView = mContentView.getChildAt(i); if (childView instanceof ViewGroup) { if (childView instanceof DrawerLayout) { - View childAt1 = ((DrawerLayout) childView).getChildAt(0); - if (childAt1 != null) { - mBarParams.systemWindows = childAt1.getFitsSystemWindows(); - if (mBarParams.systemWindows) { - mContentView.setPadding(0, 0, 0, 0); - return; - } - } - } else { - mBarParams.systemWindows = childView.getFitsSystemWindows(); - if (mBarParams.systemWindows) { - mContentView.setPadding(0, 0, 0, 0); - return; + continue; + } + if (childView.getFitsSystemWindows()) { + if (mBarParams.isSupportActionBar) { + top = mBarConfig.getActionBarHeight(); } + mContentView.setPadding(0, top, 0, 0); + return; } } - } - // 解决android4.4有导航栏的情况下,activity底部被导航栏遮挡的问题 - if (mConfig.hasNavigationBar() && !mBarParams.fullScreenTemp && !mBarParams.fullScreen) { - if (mConfig.isNavigationAtBottom()) { //判断导航栏是否在底部 - if (!mBarParams.isSupportActionBar) { //判断是否支持actionBar - if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { - if (mBarParams.fits) - mContentView.setPadding(0, mConfig.getStatusBarHeight(), - 0, mConfig.getNavigationBarHeight()); //有导航栏,获得rootView的根节点,然后设置距离底部的padding值为导航栏的高度值 - else - mContentView.setPadding(0, 0, 0, mConfig.getNavigationBarHeight()); - } else { - if (mBarParams.fits) - mContentView.setPadding(0, mConfig.getStatusBarHeight(), 0, 0); - else - mContentView.setPadding(0, 0, 0, 0); - } - } else { - //支持有actionBar的界面 - if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) - mContentView.setPadding(0, mConfig.getStatusBarHeight() + - mConfig.getActionBarHeight() + 10, 0, mConfig.getNavigationBarHeight()); - else - mContentView.setPadding(0, mConfig.getStatusBarHeight() + - mConfig.getActionBarHeight() + 10, 0, 0); + if (mBarParams.fits && mFitsStatusBarType == FLAG_FITS_SYSTEM_WINDOWS) { + top = mBarConfig.getStatusBarHeight(); + } + if (mBarParams.isSupportActionBar) { + top = mBarConfig.getStatusBarHeight() + mBarConfig.getActionBarHeight(); + } + mContentView.setPadding(0, top, 0, 0); + } + + /** + * 解决android4.4有导航栏的情况下,activity底部被导航栏遮挡的问题和android 5.0以下解决状态栏和布局重叠问题 + * Fits windows below lollipop. + */ + private void fitsWindowsBelowLOLLIPOP() { + int top = 0, right = 0, bottom = 0; + for (int i = 0, count = mContentView.getChildCount(); i < count; i++) { + View childView = mContentView.getChildAt(i); + if (childView instanceof ViewGroup) { + if (childView instanceof DrawerLayout) { + continue; } - } else { - if (!mBarParams.isSupportActionBar) { - if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { - if (mBarParams.fits) - mContentView.setPadding(0, mConfig.getStatusBarHeight(), - mConfig.getNavigationBarWidth(), 0); //不在底部,设置距离右边的padding值为导航栏的宽度值 - else - mContentView.setPadding(0, 0, mConfig.getNavigationBarWidth(), 0); - } else { - if (mBarParams.fits) - mContentView.setPadding(0, mConfig.getStatusBarHeight(), 0, 0); - else - mContentView.setPadding(0, 0, 0, 0); + if (childView.getFitsSystemWindows()) { + if (mBarParams.isSupportActionBar) { + top = mBarConfig.getActionBarHeight(); } + mContentView.setPadding(0, top, right, bottom); + return; + } + } + } + if (mBarParams.fits && mFitsStatusBarType == FLAG_FITS_SYSTEM_WINDOWS) { + top = mBarConfig.getStatusBarHeight(); + } + if (mBarParams.isSupportActionBar) { + top = mBarConfig.getStatusBarHeight() + mBarConfig.getActionBarHeight(); + } + if (mBarConfig.hasNavigationBar() && mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { + if (!mBarParams.fullScreen) { + if (mBarConfig.isNavigationAtBottom()) { + bottom = mBarConfig.getNavigationBarHeight(); } else { - //支持有actionBar的界面 - if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) - mContentView.setPadding(0, mConfig.getStatusBarHeight() + - mConfig.getActionBarHeight() + 10, mConfig.getNavigationBarWidth(), 0); - else - mContentView.setPadding(0, mConfig.getStatusBarHeight() + - mConfig.getActionBarHeight() + 10, 0, 0); + right = mBarConfig.getNavigationBarWidth(); } } - } else { - if (!mBarParams.isSupportActionBar) { - if (mBarParams.fits) - mContentView.setPadding(0, mConfig.getStatusBarHeight(), 0, 0); - else - mContentView.setPadding(0, 0, 0, 0); + if (mBarParams.hideNavigationBar) { + if (mBarConfig.isNavigationAtBottom()) { + bottom = 0; + } else { + right = 0; + } } else { - //支持有actionBar的界面 - mContentView.setPadding(0, mConfig.getStatusBarHeight() + mConfig.getActionBarHeight() + 10, 0, 0); + if (!mBarConfig.isNavigationAtBottom()) { + right = mBarConfig.getNavigationBarWidth(); + } } + } + mContentView.setPadding(0, top, right, bottom); } /** * 注册emui3.x导航栏监听函数 * Register emui 3 x. */ - private void registerEMUI3_x() { - if ((OSUtils.isEMUI3_1() || OSUtils.isEMUI3_0()) && mConfig.hasNavigationBar() - && mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { - if (mBarParams.navigationStatusObserver == null && mBarParams.navigationBarView != null) { - mBarParams.navigationStatusObserver = new ContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange) { + private void fitsWindowsEMUI() { + final View navigationBarView = mDecorView.findViewById(IMMERSION_NAVIGATION_BAR_VIEW); + if (navigationBarView != null && mNavigationObserver == null) { + mNavigationObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + if (mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { + mBarConfig = new BarConfig(mActivity); + int bottom = mContentView.getPaddingBottom(), right = mContentView.getPaddingRight(); if (mActivity != null && mActivity.getContentResolver() != null) { int navigationBarIsMin = Settings.System.getInt(mActivity.getContentResolver(), NAVIGATIONBAR_IS_MIN, 0); if (navigationBarIsMin == 1) { //导航键隐藏了 - mBarParams.navigationBarView.setVisibility(View.GONE); - mContentView.setPadding(0, mContentView.getPaddingTop(), 0, 0); + navigationBarView.setVisibility(View.GONE); + bottom = 0; + right = 0; } else { - //导航键显示了 - mBarParams.navigationBarView.setVisibility(View.VISIBLE); - if (!mBarParams.systemWindows) { - if (mConfig.isNavigationAtBottom()) - mContentView.setPadding(0, mContentView.getPaddingTop(), 0, mConfig.getNavigationBarHeight()); - else - mContentView.setPadding(0, mContentView.getPaddingTop(), mConfig.getNavigationBarWidth(), 0); - } else - mContentView.setPadding(0, mContentView.getPaddingTop(), 0, 0); + if (mNavigationBarHeight == 0) { + mNavigationBarHeight = mBarConfig.getNavigationBarHeight(); + } + if (mNavigationBarWidth == 0) { + mNavigationBarWidth = mBarConfig.getNavigationBarWidth(); + } + if (!mBarParams.hideNavigationBar) { + FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) navigationBarView.getLayoutParams(); + if (mBarConfig.isNavigationAtBottom()) { + params.height = mNavigationBarHeight; + params.gravity = Gravity.BOTTOM; + bottom = mNavigationBarHeight; + right = 0; + } else { + params.width = mNavigationBarWidth; + params.gravity = Gravity.END; + bottom = 0; + right = mNavigationBarWidth; + } + navigationBarView.setLayoutParams(params); + //导航键显示了 + navigationBarView.setVisibility(View.VISIBLE); + } } } + mContentView.setPadding(0, mContentView.getPaddingTop(), right, bottom); + } else { + navigationBarView.setVisibility(View.GONE); } - }; - if (mActivity != null && mActivity.getContentResolver() != null && mBarParams.navigationStatusObserver != null) { - mActivity.getContentResolver().registerContentObserver(Settings.System.getUriFor - (NAVIGATIONBAR_IS_MIN), true, mBarParams.navigationStatusObserver); } + }; + if (mActivity != null && mActivity.getContentResolver() != null && mNavigationObserver != null) { + mActivity.getContentResolver().registerContentObserver(Settings.System.getUriFor + (NAVIGATIONBAR_IS_MIN), true, mNavigationObserver); } } } /** - * 取消注册emui3.x导航栏监听函数 - * Un register emui 3 x. + * Sets status bar dark font. + * 设置状态栏字体颜色,android6.0以上 */ - private void unRegisterEMUI3_x() { - if ((OSUtils.isEMUI3_1() || OSUtils.isEMUI3_0()) && mConfig.hasNavigationBar() - && mBarParams.navigationBarEnable && mBarParams.navigationBarWithKitkatEnable) { - if (mActivity != null && mActivity.getContentResolver() != null && - mBarParams.navigationStatusObserver != null && mBarParams.navigationBarView != null) - mActivity.getContentResolver().unregisterContentObserver(mBarParams.navigationStatusObserver); + private int setStatusBarDarkFont(int uiFlags) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && mBarParams.darkFont) { + return uiFlags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } else { + return uiFlags; } } /** - * Hide bar. - * 隐藏或显示状态栏和导航栏。 + * 设置状态栏字体图标为深色,需要MIUIV6以上 * - * @param uiFlags the ui flags - * @return the int + * @param window the window + * @param darkFont the dark font */ + @SuppressLint("PrivateApi") + private void setMIUIStatusBarDarkFont(Window window, boolean darkFont) { + if (window != null) { + Class clazz = window.getClass(); + try { + int darkModeFlag; + Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); + Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); + darkModeFlag = field.getInt(layoutParams); + Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); + if (darkFont) { + //状态栏透明且黑色字体 + extraFlagField.invoke(window, darkModeFlag, darkModeFlag); + } else { + //清除黑色字体 + extraFlagField.invoke(window, 0, darkModeFlag); + } + } catch (Exception ignored) { - private int hideBar(int uiFlags) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - switch (mBarParams.barHide) { - case FLAG_HIDE_BAR: - uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.INVISIBLE; - break; - case FLAG_HIDE_STATUS_BAR: - uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.INVISIBLE; - break; - case FLAG_HIDE_NAVIGATION_BAR: - uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - break; - case FLAG_SHOW_BAR: - uiFlags |= View.SYSTEM_UI_FLAG_VISIBLE; - break; } } - return uiFlags | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } /** - * Sets status bar dark font. - * 设置状态栏字体颜色,android6.0以上 + * 适配状态栏与布局重叠问题 + * Fits layout overlap. */ - private int setStatusBarDarkFont(int uiFlags) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && mBarParams.darkFont) { - return uiFlags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; - } else { - return uiFlags; + private void fitsLayoutOverlap() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && !mIsFitsLayoutOverlap) { + switch (mFitsStatusBarType) { + case FLAG_FITS_TITLE: + //通过设置paddingTop重新绘制标题栏高度 + setTitleBar(mActivity, mBarParams.titleBarView); + mIsFitsLayoutOverlap = true; + break; + case FLAG_FITS_TITLE_MARGIN_TOP: + //通过设置marginTop重新绘制标题栏高度 + setTitleBarMarginTop(mActivity, mBarParams.titleBarView); + mIsFitsLayoutOverlap = true; + break; + case FLAG_FITS_STATUS: + //通过状态栏高度动态设置状态栏布局 + setStatusBarView(mActivity, mBarParams.statusBarView); + mIsFitsLayoutOverlap = true; + break; + default: + break; + } } } /** * 变色view - *

* Transform view. */ private void transformView() { @@ -1788,107 +2010,24 @@ private void transformView() { colorAfter = integerEntry.getValue(); } if (view != null) { - if (Math.abs(mBarParams.viewAlpha - 0.0f) == 0) + if (Math.abs(mBarParams.viewAlpha - 0.0f) == 0) { view.setBackgroundColor(ColorUtils.blendARGB(colorBefore, colorAfter, mBarParams.statusBarAlpha)); - else + } else { view.setBackgroundColor(ColorUtils.blendARGB(colorBefore, colorAfter, mBarParams.viewAlpha)); - } - } - } - } - - - /** - * 通过状态栏高度动态设置状态栏布局 - */ - private void setStatusBarView() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && mBarParams.statusBarViewByHeight != null) { - ViewGroup.LayoutParams params = mBarParams.statusBarViewByHeight.getLayoutParams(); - params.height = mConfig.getStatusBarHeight(); - mBarParams.statusBarViewByHeight.setLayoutParams(params); - } - } - - /** - * 重新绘制标题栏高度,解决状态栏与顶部重叠问题 - * Sets title bar. - */ - private void setTitleBar() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && mBarParams.titleBarView != null) { - final ViewGroup.LayoutParams layoutParams = mBarParams.titleBarView.getLayoutParams(); - if (layoutParams.height == ViewGroup.LayoutParams.WRAP_CONTENT || - layoutParams.height == ViewGroup.LayoutParams.MATCH_PARENT) { - mBarParams.titleBarView.post(new Runnable() { - @Override - public void run() { - if (mBarParams.titleBarHeight == 0) - mBarParams.titleBarHeight = mBarParams.titleBarView.getHeight() + mConfig.getStatusBarHeight(); - if (mBarParams.titleBarPaddingTopHeight == 0) - mBarParams.titleBarPaddingTopHeight = mBarParams.titleBarView.getPaddingTop() - + mConfig.getStatusBarHeight(); - layoutParams.height = mBarParams.titleBarHeight; - mBarParams.titleBarView.setPadding(mBarParams.titleBarView.getPaddingLeft(), - mBarParams.titleBarPaddingTopHeight, - mBarParams.titleBarView.getPaddingRight(), - mBarParams.titleBarView.getPaddingBottom()); - mBarParams.titleBarView.setLayoutParams(layoutParams); } - }); - } else { - if (mBarParams.titleBarHeight == 0) - mBarParams.titleBarHeight = layoutParams.height + mConfig.getStatusBarHeight(); - if (mBarParams.titleBarPaddingTopHeight == 0) - mBarParams.titleBarPaddingTopHeight = mBarParams.titleBarView.getPaddingTop() - + mConfig.getStatusBarHeight(); - layoutParams.height = mBarParams.titleBarHeight; - mBarParams.titleBarView.setPadding(mBarParams.titleBarView.getPaddingLeft(), - mBarParams.titleBarPaddingTopHeight, - mBarParams.titleBarView.getPaddingRight(), - mBarParams.titleBarView.getPaddingBottom()); - mBarParams.titleBarView.setLayoutParams(layoutParams); + } } } } /** - * 绘制标题栏距离顶部的高度为状态栏的高度 - * Sets title bar margin top. - */ - private void setTitleBarMarginTop() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) mBarParams.titleBarViewMarginTop.getLayoutParams(); - layoutParams.setMargins(layoutParams.leftMargin, - layoutParams.topMargin + mConfig.getStatusBarHeight(), - layoutParams.rightMargin, - layoutParams.bottomMargin); - mBarParams.titleBarViewMarginTopFlag = true; - } - } - - /** - * 支持actionBar的界面 - * Support action bar. + * 取消注册emui3.x导航栏监听函数 + * Un register emui 3 x. */ - private void supportActionBar() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !OSUtils.isEMUI3_1()) { - for (int i = 0, count = mContentView.getChildCount(); i < count; i++) { - View childView = mContentView.getChildAt(i); - if (childView instanceof ViewGroup) { - mBarParams.systemWindows = childView.getFitsSystemWindows(); - if (mBarParams.systemWindows) { - mContentView.setPadding(0, 0, 0, 0); - return; - } - } - } - if (mBarParams.isSupportActionBar) { - mContentView.setPadding(0, mConfig.getStatusBarHeight() + mConfig.getActionBarHeight(), 0, 0); - } else { - if (mBarParams.fits) - mContentView.setPadding(0, mConfig.getStatusBarHeight(), 0, 0); - else - mContentView.setPadding(0, 0, 0, 0); - } + private void unRegisterEMUI3_x() { + if (mActivity != null && mNavigationObserver != null) { + mActivity.getContentResolver().unregisterContentObserver(mNavigationObserver); + mNavigationObserver = null; } } @@ -1902,7 +2041,8 @@ private void keyboardEnable() { mBarParams.keyboardPatch = KeyboardPatch.patch(mActivity, mWindow); } mBarParams.keyboardPatch.setBarParams(mBarParams); - if (mBarParams.keyboardEnable) { //解决软键盘与底部输入框冲突问题 + //解决软键盘与底部输入框冲突问题 + if (mBarParams.keyboardEnable) { mBarParams.keyboardPatch.enable(mBarParams.keyboardMode); } else { mBarParams.keyboardPatch.disable(mBarParams.keyboardMode); @@ -1911,28 +2051,23 @@ private void keyboardEnable() { } /** - * 设置状态栏字体图标为深色,需要MIUIV6以上 + * Gets bar params. * - * @return boolean 成功执行返回true + * @return the bar params */ - private void setMIUIStatusBarDarkFont(Window window, boolean darkFont) { - if (window != null) { - Class clazz = window.getClass(); - try { - int darkModeFlag; - Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); - Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); - darkModeFlag = field.getInt(layoutParams); - Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); - if (darkFont) { - extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体 - } else { - extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体 - } - } catch (Exception e) { - e.printStackTrace(); - } - } + public BarParams getBarParams() { + return mBarParams; + } + + /** + * 判断手机支不支持状态栏字体变色 + * Is support status bar dark font boolean. + * + * @return the boolean + */ + public static boolean isSupportStatusBarDarkFont() { + return OSUtils.isMIUI6Later() || OSUtils.isFlymeOS4Later() + || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M); } /** @@ -1943,20 +2078,28 @@ private void setMIUIStatusBarDarkFont(Window window, boolean darkFont) { * @param view the view */ public static void setTitleBar(final Activity activity, final View view) { + if (activity == null) { + return; + } + if (view == null) { + return; + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - final ViewGroup.LayoutParams lp = view.getLayoutParams(); - if (lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) { //解决状态栏高度为warp_content或match_parent问题 - view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + final ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); + if (layoutParams.height == ViewGroup.LayoutParams.WRAP_CONTENT || + layoutParams.height == ViewGroup.LayoutParams.MATCH_PARENT) { + view.post(new Runnable() { @Override - public void onGlobalLayout() { - view.getViewTreeObserver().removeOnGlobalLayoutListener(this); - lp.height = view.getHeight() + getStatusBarHeight(activity); - view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(activity), - view.getPaddingRight(), view.getPaddingBottom()); + public void run() { + layoutParams.height = view.getHeight() + getStatusBarHeight(activity); + view.setPadding(view.getPaddingLeft(), + view.getPaddingTop() + getStatusBarHeight(activity), + view.getPaddingRight(), + view.getPaddingBottom()); } }); } else { - lp.height += getStatusBarHeight(activity); + layoutParams.height += getStatusBarHeight(activity); view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(activity), view.getPaddingRight(), view.getPaddingBottom()); } @@ -1964,34 +2107,46 @@ public void onGlobalLayout() { } /** - * 单独在标题栏的位置增加view,高度为状态栏的高度 - * Sets status bar view. + * 设置标题栏MarginTop值为导航栏的高度 + * Sets title bar margin top. * * @param activity the activity * @param view the view */ - public static void setStatusBarView(Activity activity, View view) { + public static void setTitleBarMarginTop(Activity activity, View view) { + if (activity == null) { + return; + } + if (view == null) { + return; + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - ViewGroup.LayoutParams params = view.getLayoutParams(); - params.height = getStatusBarHeight(activity); - view.setLayoutParams(params); + ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); + layoutParams.setMargins(layoutParams.leftMargin, + layoutParams.topMargin + getStatusBarHeight(activity), + layoutParams.rightMargin, + layoutParams.bottomMargin); } } /** - * 设置标题栏MarginTop值为导航栏的高度 - * Sets title bar margin top. + * 单独在标题栏的位置增加view,高度为状态栏的高度 + * Sets status bar view. * * @param activity the activity * @param view the view */ - public static void setTitleBarMarginTop(Activity activity, @NonNull View view) { + public static void setStatusBarView(Activity activity, View view) { + if (activity == null) { + return; + } + if (view == null) { + return; + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); - layoutParams.setMargins(layoutParams.leftMargin, - layoutParams.topMargin + getStatusBarHeight(activity), - layoutParams.rightMargin, - layoutParams.bottomMargin); + ViewGroup.LayoutParams params = view.getLayoutParams(); + params.height = getStatusBarHeight(activity); + view.setLayoutParams(params); } } @@ -2002,7 +2157,10 @@ public static void setTitleBarMarginTop(Activity activity, @NonNull View view) { * @param activity the activity */ public static void setFitsSystemWindows(Activity activity) { - ViewGroup parent = (ViewGroup) activity.findViewById(android.R.id.content); + if (activity == null) { + return; + } + ViewGroup parent = activity.findViewById(android.R.id.content); for (int i = 0, count = parent.getChildCount(); i < count; i++) { View childView = parent.getChildAt(i); if (childView instanceof ViewGroup) { @@ -2020,7 +2178,7 @@ public static void setFitsSystemWindows(Activity activity) { * @return the boolean */ @TargetApi(14) - public static boolean hasNavigationBar(Activity activity) { + public static boolean hasNavigationBar(@NonNull Activity activity) { BarConfig config = new BarConfig(activity); return config.hasNavigationBar(); } @@ -2033,7 +2191,7 @@ public static boolean hasNavigationBar(Activity activity) { * @return the navigation bar height */ @TargetApi(14) - public static int getNavigationBarHeight(Activity activity) { + public static int getNavigationBarHeight(@NonNull Activity activity) { BarConfig config = new BarConfig(activity); return config.getNavigationBarHeight(); } @@ -2046,7 +2204,7 @@ public static int getNavigationBarHeight(Activity activity) { * @return the navigation bar width */ @TargetApi(14) - public static int getNavigationBarWidth(Activity activity) { + public static int getNavigationBarWidth(@NonNull Activity activity) { BarConfig config = new BarConfig(activity); return config.getNavigationBarWidth(); } @@ -2059,7 +2217,7 @@ public static int getNavigationBarWidth(Activity activity) { * @return the boolean */ @TargetApi(14) - public static boolean isNavigationAtBottom(Activity activity) { + public static boolean isNavigationAtBottom(@NonNull Activity activity) { BarConfig config = new BarConfig(activity); return config.isNavigationAtBottom(); } @@ -2072,7 +2230,7 @@ public static boolean isNavigationAtBottom(Activity activity) { * @return the status bar height */ @TargetApi(14) - public static int getStatusBarHeight(Activity activity) { + public static int getStatusBarHeight(@NonNull Activity activity) { BarConfig config = new BarConfig(activity); return config.getStatusBarHeight(); } @@ -2085,53 +2243,22 @@ public static int getStatusBarHeight(Activity activity) { * @return the action bar height */ @TargetApi(14) - public static int getActionBarHeight(Activity activity) { + public static int getActionBarHeight(@NonNull Activity activity) { BarConfig config = new BarConfig(activity); return config.getActionBarHeight(); } - /** - * 判断手机支不支持状态栏字体变色 - * Is support status bar dark font boolean. - * - * @return the boolean - */ - public static boolean isSupportStatusBarDarkFont() { - if (OSUtils.isMIUI6Later() || OSUtils.isFlymeOS4Later() - || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)) { - return true; - } else - return false; - } - /** * 隐藏状态栏 * Hide status bar. * * @param window the window */ - public static void hideStatusBar(Window window) { + public static void hideStatusBar(@NonNull Window window) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } - /** - * Gets bar params. - * - * @return the bar params - */ - public BarParams getBarParams() { - return mBarParams; - } - - public BarParams getTagBarParams(String tag) { - BarParams barParams = null; - if (!isEmpty(tag)) { - barParams = mTagMap.get(mActivityName + "_TAG_" + tag); - } - return barParams; - } - private static boolean isEmpty(String str) { return str == null || str.trim().length() == 0; } diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionFragment.java b/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionFragment.java index af3d3ff..ee45729 100644 --- a/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionFragment.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/ImmersionFragment.java @@ -7,7 +7,9 @@ * 为了能够在fragment使用沉浸式而fragment之间又相互不影响,必须实现immersionInit方法, * 原理是当用户可见才执行沉浸式初始化 * 已过时,当配合vieapager使用时,请自行使用懒加载方式实现,或者参看我的demo里的BaseLazyFragment - * Created by geyifeng on 2017/5/12. + * + * @author geyifeng + * @date 2017/5/12 */ @Deprecated public abstract class ImmersionFragment extends Fragment { diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/OSUtils.java b/barlibrary/src/main/java/com/gyf/barlibrary/OSUtils.java index 042755d..49c8c57 100644 --- a/barlibrary/src/main/java/com/gyf/barlibrary/OSUtils.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/OSUtils.java @@ -6,7 +6,9 @@ /** * 手机系统判断 - * Created by geyifeng on 2017/4/18. + * + * @author geyifeng + * @date 2017/4/18 */ public class OSUtils { @@ -180,8 +182,8 @@ private static String getFlymeOSFlag() { private static String getSystemProperty(String key, String defaultValue) { try { Class clz = Class.forName("android.os.SystemProperties"); - Method get = clz.getMethod("get", String.class, String.class); - return (String) get.invoke(clz, key, defaultValue); + Method method = clz.getMethod("get", String.class, String.class); + return (String) method.invoke(clz, key, defaultValue); } catch (Exception e) { e.printStackTrace(); } diff --git a/barlibrary/src/main/java/com/gyf/barlibrary/OnKeyboardListener.java b/barlibrary/src/main/java/com/gyf/barlibrary/OnKeyboardListener.java index 055a84b..2205c6c 100644 --- a/barlibrary/src/main/java/com/gyf/barlibrary/OnKeyboardListener.java +++ b/barlibrary/src/main/java/com/gyf/barlibrary/OnKeyboardListener.java @@ -2,7 +2,9 @@ /** * 软键盘监听 - * Created by geyifeng on 2017/8/28. + * + * @author geyifeng + * @date 2017/8/28 */ public interface OnKeyboardListener { /** diff --git a/barlibrary/src/main/res/values/ids.xml b/barlibrary/src/main/res/values/ids.xml new file mode 100644 index 0000000..377723b --- /dev/null +++ b/barlibrary/src/main/res/values/ids.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 90fa6ed..e1ea206 100644 --- a/build.gradle +++ b/build.gradle @@ -20,11 +20,16 @@ allprojects { jcenter() maven { url 'https://jitpack.io' } } +// tasks.withType(Javadoc) { +// options { +// encoding "UTF-8" +// charSet 'UTF-8' +// links "http://docs.oracle.com/javase/7/docs/api" +// } +// } tasks.withType(Javadoc) { - options{ encoding "UTF-8" - charSet 'UTF-8' - links "http://docs.oracle.com/javase/7/docs/api" - } + options.addStringOption('Xdoclint:none', '-quiet') + options.addStringOption('encoding', 'UTF-8') } } diff --git a/gradle.properties b/gradle.properties index 144a0e7..fb27d59 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,4 @@ org.gradle.jvmargs=-Xmx1536m # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -android.enableAapt2= false +# android.enableAapt2= false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b9b13ff..32c3bef 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Mon Sep 03 15:00:55 CST 2018 +#Thu Nov 08 22:22:29 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/sample/build.gradle b/sample/build.gradle index 1020eef..32be544 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { applicationId "com.gyf.immersionbar" minSdkVersion 18 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 1 versionName "2.3.2-beta02" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -23,6 +23,10 @@ android { // but continue the build even when errors are found: abortOnError false } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { @@ -30,23 +34,23 @@ dependencies { androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:design:28.0.0' testImplementation 'junit:junit:4.12' implementation project(':barlibrary') //注解 - implementation 'com.jakewharton:butterknife:8.5.1' - annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' + implementation 'com.jakewharton:butterknife:8.8.1' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' //侧滑返回 implementation 'me.imid.swipebacklayout.lib:library:1.1.0' //log日志 implementation 'com.apkfuns.logutils:library:1.5.1.1' //轮播图 - implementation 'com.youth.banner:banner:1.4.9' + implementation 'com.youth.banner:banner:1.4.10' //RecyclerView框架 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.40' //图片加载框架 - implementation 'com.github.bumptech.glide:glide:3.7.0' + implementation 'com.github.bumptech.glide:glide:4.8.0' //下拉刷新上拉加载 implementation 'com.lcodecorex:tkrefreshlayout:1.0.7' //圆形imageView diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 02e0301..a239831 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -18,81 +19,115 @@ android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + tools:ignore="GoogleAppIndexingWarning"> + android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden"> - + - + - + - + - - + + - - + + - - + + - + \ No newline at end of file diff --git a/sample/src/main/java/com/gyf/immersionbar/MyApp.java b/sample/src/main/java/com/gyf/immersionbar/MyApp.java index 8482fb4..e0aa424 100644 --- a/sample/src/main/java/com/gyf/immersionbar/MyApp.java +++ b/sample/src/main/java/com/gyf/immersionbar/MyApp.java @@ -3,19 +3,19 @@ import android.app.Application; import com.squareup.leakcanary.LeakCanary; -import com.tencent.bugly.crashreport.CrashReport; /** - * Created by geyifeng on 2017/8/4. + * + * @author geyifeng + * @date 2017/8/4 */ - public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); -// if (LeakCanary.isInAnalyzerProcess(this)) { -// return; -// } -// LeakCanary.install(this); + if (LeakCanary.isInAnalyzerProcess(this)) { + return; + } + LeakCanary.install(this); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/ActionBarActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/ActionBarActivity.java index 4046c31..d73454d 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/ActionBarActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/ActionBarActivity.java @@ -1,7 +1,8 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; +import android.content.res.Configuration; import android.support.v7.app.ActionBar; -import android.view.View; import android.widget.Button; import android.widget.TextView; @@ -11,7 +12,8 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/6/2. + * @author geyifeng + * @date 2017/6/2 */ public class ActionBarActivity extends BaseActivity { @@ -22,16 +24,22 @@ public class ActionBarActivity extends BaseActivity { TextView text; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_action_bar; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.keyboardEnable(true).init(); + ImmersionBar.with(this).keyboardEnable(true).init(); } + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } + + @SuppressLint("SetTextI18n") @Override protected void initView() { ActionBar actionBar = getSupportActionBar(); @@ -41,19 +49,18 @@ protected void initView() { text.setText("上面图片被actionBar遮挡住了,我想使布局从actionBar下面开始绘制,怎么办?"); } + @SuppressLint("SetTextI18n") @Override protected void setListener() { - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mImmersionBar.statusBarColor(R.color.colorPrimary) - .supportActionBar(true) - .init(); - text.setText("哈哈哈!解决啦!就问你惊不惊喜,意不意外,刺不刺激!!!" + - "重点是这个方法supportActionBar(true),实现原理,当为true时,布局距离顶部的" + - "padding值为状态栏的高度+ActionBar的高度"); - btn.setText("解决啦"); - } + btn.setOnClickListener(v -> { + ImmersionBar.with(this) + .supportActionBar(true) + .statusBarColor(R.color.colorPrimary) + .init(); + text.setText("哈哈哈!解决啦!就问你惊不惊喜,意不意外,刺不刺激!!!" + + "重点是这个方法supportActionBar(true),实现原理,当为true时,布局距离顶部的" + + "padding值为状态栏的高度+ActionBar的高度"); + btn.setText("解决啦"); }); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/BackActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/BackActivity.java index f3a8ee9..5f6d559 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/BackActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/BackActivity.java @@ -9,9 +9,9 @@ import me.imid.swipebacklayout.lib.app.SwipeBackActivity; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class BackActivity extends SwipeBackActivity { diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/BaseActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/BaseActivity.java index b577aa8..799af18 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/BaseActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/BaseActivity.java @@ -1,6 +1,7 @@ package com.gyf.immersionbar.activity; import android.content.Context; +import android.content.res.Configuration; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; @@ -8,30 +9,30 @@ import android.view.inputmethod.InputMethodManager; import com.gyf.barlibrary.ImmersionBar; +import com.gyf.immersionbar.R; import butterknife.ButterKnife; -import butterknife.Unbinder; /** * Activity基类 - * Created by geyifeng on 2017/5/9. + * + * @author geyifeng + * @date 2017/5/9 */ - public abstract class BaseActivity extends AppCompatActivity { - private InputMethodManager imm; - protected ImmersionBar mImmersionBar; - private Unbinder unbinder; + private InputMethodManager mInputMethodManager; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(setLayoutId()); + setContentView(getLayoutId()); //绑定控件 - unbinder = ButterKnife.bind(this); + ButterKnife.bind(this); //初始化沉浸式 - if (isImmersionBarEnabled()) + if (isImmersionBarEnabled()) { initImmersionBar(); + } //初始化数据 initData(); //view与数据绑定 @@ -43,18 +44,30 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { @Override protected void onDestroy() { super.onDestroy(); - unbinder.unbind(); - this.imm = null; - if (mImmersionBar != null) - mImmersionBar.destroy(); //在BaseActivity里销毁 + mInputMethodManager = null; + if (isImmersionBarEnabled()) { + ImmersionBar.with(this).destroy(); + } } - protected abstract int setLayoutId(); + /** + * 子类设置布局Id + * + * @return the layout id + */ + protected abstract int getLayoutId(); protected void initImmersionBar() { //在BaseActivity里初始化 - mImmersionBar = ImmersionBar.with(this); - mImmersionBar.init(); + ImmersionBar.with(this).navigationBarColor(R.color.colorPrimary).init(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (isImmersionBarEnabled()) { + ImmersionBar.with(this).init(); + } } protected void initData() { @@ -76,6 +89,7 @@ protected boolean isImmersionBarEnabled() { return true; } + @Override public void finish() { super.finish(); hideSoftKeyBoard(); @@ -83,11 +97,11 @@ public void finish() { public void hideSoftKeyBoard() { View localView = getCurrentFocus(); - if (this.imm == null) { - this.imm = ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)); + if (this.mInputMethodManager == null) { + this.mInputMethodManager = ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)); } - if ((localView != null) && (this.imm != null)) { - this.imm.hideSoftInputFromWindow(localView.getWindowToken(), 2); + if ((localView != null) && (this.mInputMethodManager != null)) { + this.mInputMethodManager.hideSoftInputFromWindow(localView.getWindowToken(), 2); } } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/BlogActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/BlogActivity.java index d0f1115..e255bc2 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/BlogActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/BlogActivity.java @@ -8,6 +8,7 @@ import android.webkit.WebView; import android.webkit.WebViewClient; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; @@ -15,7 +16,9 @@ import static android.view.KeyEvent.KEYCODE_BACK; /** - * Created by geyifeng on 2017/8/3. + * + * @author geyifeng + * @date 2017/8/3 */ public class BlogActivity extends BaseActivity { @@ -31,13 +34,13 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_git_hub; } @Override protected void initView() { - if (blog.equals("github")) { + if ("github".equals(blog)) { mWebView.loadUrl("https://github.com/gyf-dev/ImmersionBar"); } else { mWebView.loadUrl("https://www.jianshu.com/p/2a884e211a62"); @@ -54,10 +57,11 @@ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request @Override protected void initImmersionBar() { super.initImmersionBar(); - if (blog.equals("github")) { - mImmersionBar.fitsSystemWindows(true).statusBarColor(R.color.github_color).init(); - } else - mImmersionBar.fitsSystemWindows(true).statusBarColorInt(Color.WHITE).statusBarDarkFont(true, 0.2f).init(); + if ("github".equals(blog)) { + ImmersionBar.with(this).fitsSystemWindows(true).statusBarColor(R.color.github_color).init(); + } else { + ImmersionBar.with(this).fitsSystemWindows(true).statusBarColorInt(Color.WHITE).statusBarDarkFont(true, 0.2f).init(); + } } @Override diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/ColorActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/ColorActivity.java index 2311068..d57b68a 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/ColorActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/ColorActivity.java @@ -1,19 +1,21 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.support.v7.widget.Toolbar; import android.widget.Button; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class ColorActivity extends BaseActivity { @BindView(R.id.text_view) @@ -32,19 +34,21 @@ public class ColorActivity extends BaseActivity { SeekBar seekBar; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_color; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.statusBarView(R.id.top_view) + ImmersionBar.with(this) + .statusBarView(R.id.top_view) .statusBarColor(R.color.colorPrimary) .navigationBarColor(R.color.btn8) .init(); } + @SuppressLint("SetTextI18n") @Override protected void setListener() { seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @@ -52,7 +56,7 @@ protected void setListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { float alpha = (float) progress / 100; textView.setText("透明度:" + alpha + "f"); - mImmersionBar.barAlpha(alpha) + ImmersionBar.with(ColorActivity.this).barAlpha(alpha) .statusBarColorTransform(R.color.btn14) .navigationBarColorTransform(R.color.btn3) .addViewSupportTransformColor(mToolbar) diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/CoordinatorActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/CoordinatorActivity.java index 2df357c..97f0ebd 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/CoordinatorActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/CoordinatorActivity.java @@ -1,5 +1,6 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.ActionBar; @@ -7,14 +8,15 @@ import android.view.View; import android.widget.TextView; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/5/30. + * @author geyifeng + * @date 2017/5/30 */ - public class CoordinatorActivity extends BaseActivity { @BindView(R.id.detail_toolbar) Toolbar toolbar; @@ -24,16 +26,17 @@ public class CoordinatorActivity extends BaseActivity { TextView textView; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_coordinator; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(toolbar).init(); + ImmersionBar.with(this).titleBar(toolbar).init(); } + @SuppressLint("SetTextI18n") @Override protected void initView() { super.initView(); @@ -42,13 +45,6 @@ protected void initView() { if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Snackbar.make(view, "我是Snackbar", Snackbar.LENGTH_LONG) - .show(); - } - }); textView.setText("关于Snackbar在4.4和emui3.1上高度显示不准确的问题是由于沉浸式使用了系统的" + "WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS或者WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION" + "属性造成的,目前尚不知有什么解决办法"); @@ -56,12 +52,8 @@ public void onClick(View view) { @Override protected void setListener() { + fab.setOnClickListener(view -> Snackbar.make(view, "我是Snackbar", Snackbar.LENGTH_LONG).show()); //toolbar返回按钮监听 - toolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); + toolbar.setNavigationOnClickListener(v -> finish()); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/DialogActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/DialogActivity.java index d37acf5..676bf5b 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/DialogActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/DialogActivity.java @@ -24,97 +24,85 @@ import butterknife.OnClick; /** - * Created by geyifeng on 2017/7/31. + * @author geyifeng + * @date 2017/7/31 */ - public class DialogActivity extends BaseActivity implements DialogInterface.OnDismissListener { @BindView(R.id.btn_full_fragment) - Button btn_full_fragment; + Button btnFullFragment; @BindView(R.id.btn_top_fragment) - Button btn_top_fragment; + Button btnTopFragment; @BindView(R.id.btn_bottom_fragment) - Button btn_bottom_fragment; + Button btnBottomFragment; @BindView(R.id.btn_left_fragment) - Button btn_left_fragment; + Button btnLeftFragment; @BindView(R.id.btn_right_fragment) - Button btn_right_fragment; - private ImmersionBar mImmersionBarDialog = null; + Button btnRightFragment; + + private AlertDialog mAlertDialog; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_dialog; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(R.id.toolbar).keyboardEnable(true).init(); + ImmersionBar.with(this).titleBar(R.id.toolbar).keyboardEnable(true).init(); } @Override protected void setListener() { - btn_full_fragment.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //如果弹出的dialog里有输入框并且activity里设置了keyboardEnable为true的话, - //当弹出Dialog的时候,要把activity的keyboardEnable方法设置为false, - //当dialog关闭时,要把keyboardEnable设置为打开之前的状态 - mImmersionBar.keyboardEnable(false).init(); - FullDialogFragment fullDialogFragment = new FullDialogFragment(); - fullDialogFragment.show(getSupportFragmentManager(), "FullDialogFragment"); - } + btnFullFragment.setOnClickListener(v -> { + //如果弹出的dialog里有输入框并且activity里设置了keyboardEnable为true的话, + //当弹出Dialog的时候,要把activity的keyboardEnable方法设置为false, + //当dialog关闭时,要把keyboardEnable设置为打开之前的状态 + ImmersionBar.with(this).keyboardEnable(false).init(); + FullDialogFragment fullDialogFragment = new FullDialogFragment(); + fullDialogFragment.show(getSupportFragmentManager(), FullDialogFragment.class.getSimpleName()); }); - btn_top_fragment.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mImmersionBar.keyboardEnable(false).init(); - TopDialogFragment fullDialogFragment = new TopDialogFragment(); - fullDialogFragment.show(getSupportFragmentManager(), "TopDialogFragment"); - } + btnTopFragment.setOnClickListener(v -> { + ImmersionBar.with(this).keyboardEnable(false).init(); + TopDialogFragment fullDialogFragment = new TopDialogFragment(); + fullDialogFragment.show(getSupportFragmentManager(), TopDialogFragment.class.getSimpleName()); }); - btn_bottom_fragment.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mImmersionBar.keyboardEnable(false).init(); - BottomDialogFragment fullDialogFragment = new BottomDialogFragment(); - fullDialogFragment.show(getSupportFragmentManager(), "BottomDialogFragment"); - } + btnBottomFragment.setOnClickListener(v -> { + ImmersionBar.with(this).keyboardEnable(false).init(); + BottomDialogFragment fullDialogFragment = new BottomDialogFragment(); + fullDialogFragment.show(getSupportFragmentManager(), BottomDialogFragment.class.getSimpleName()); }); - btn_left_fragment.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mImmersionBar.keyboardEnable(false).init(); - LeftDialogFragment fullDialogFragment = new LeftDialogFragment(); - fullDialogFragment.show(getSupportFragmentManager(), "LeftDialogFragment"); - } + btnLeftFragment.setOnClickListener(v -> { + ImmersionBar.with(this).keyboardEnable(false).init(); + LeftDialogFragment fullDialogFragment = new LeftDialogFragment(); + fullDialogFragment.show(getSupportFragmentManager(), LeftDialogFragment.class.getSimpleName()); }); - btn_right_fragment.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mImmersionBar.keyboardEnable(false).init(); - RightDialogFragment fullDialogFragment = new RightDialogFragment(); - fullDialogFragment.show(getSupportFragmentManager(), "RightDialogFragment"); - } + btnRightFragment.setOnClickListener(v -> { + ImmersionBar.with(this).keyboardEnable(false).init(); + RightDialogFragment fullDialogFragment = new RightDialogFragment(); + fullDialogFragment.show(getSupportFragmentManager(), RightDialogFragment.class.getSimpleName()); }); } @OnClick({R.id.btn_full, R.id.btn_top, R.id.btn_bottom, R.id.btn_left, R.id.btn_right}) public void onClick(View view) { - mImmersionBar.keyboardEnable(false).init(); //取消activity的软键盘监听 + //取消activity的软键盘监听 + ImmersionBar.with(this).keyboardEnable(false).init(); //弹出Dialog AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyDialog); - AlertDialog dialog = builder.create(); - dialog.setOnDismissListener(this); - dialog.show(); + mAlertDialog = builder.create(); + mAlertDialog.setOnDismissListener(this); + mAlertDialog.show(); View dialogView = LayoutInflater.from(this).inflate(R.layout.dialog, null); - Toolbar toolbar = (Toolbar) dialogView.findViewById(R.id.toolbar); - dialog.setContentView(dialogView); - Window window = dialog.getWindow(); - //解决无法弹出输入法的问题 - window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | - WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); - //window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + Toolbar toolbar = dialogView.findViewById(R.id.toolbar); + mAlertDialog.setContentView(dialogView); + Window window = mAlertDialog.getWindow(); + if (window != null) { + //解决无法弹出输入法的问题 + window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + } //计算屏幕宽高 int width; int height; @@ -131,59 +119,75 @@ public void onClick(View view) { switch (view.getId()) { case R.id.btn_full: - window.setGravity(Gravity.TOP); - window.setWindowAnimations(R.style.RightDialog); - window.setLayout(width, height); - mImmersionBarDialog = ImmersionBar.with(this, dialog); - mImmersionBarDialog.titleBar(toolbar) - .navigationBarColor(R.color.btn3) - .keyboardEnable(true) - .init(); + if (window != null) { + window.setGravity(Gravity.TOP); + window.setWindowAnimations(R.style.RightDialog); + window.setLayout(width, height); + ImmersionBar.with(this, mAlertDialog) + .titleBar(toolbar) + .navigationBarColor(R.color.btn3) + .keyboardEnable(true) + .init(); + } break; case R.id.btn_top: - window.setGravity(Gravity.TOP); - window.setWindowAnimations(R.style.TopDialog); - window.setLayout(width, height / 2); - mImmersionBarDialog = ImmersionBar.with(this, dialog); - mImmersionBarDialog.titleBar(toolbar).navigationBarWithKitkatEnable(false).init(); + if (window != null) { + window.setGravity(Gravity.TOP); + window.setWindowAnimations(R.style.TopDialog); + window.setLayout(width, height / 2); + ImmersionBar.with(this, mAlertDialog) + .titleBar(toolbar) + .navigationBarWithKitkatEnable(false) + .init(); + } break; case R.id.btn_bottom: - window.setGravity(Gravity.BOTTOM); - window.setWindowAnimations(R.style.BottomDialog); - window.setLayout(width, height / 2); - mImmersionBarDialog = ImmersionBar.with(this, dialog); - mImmersionBarDialog.navigationBarColor(R.color.cool_green_normal).init(); + if (window != null) { + window.setGravity(Gravity.BOTTOM); + window.setWindowAnimations(R.style.BottomDialog); + window.setLayout(width, height / 2); + ImmersionBar.with(this, mAlertDialog) + .navigationBarColor(R.color.cool_green_normal) + .init(); + } break; case R.id.btn_left: - window.setGravity(Gravity.TOP | Gravity.START); - window.setWindowAnimations(R.style.LeftDialog); - window.setLayout(width * 2 / 3, height); - mImmersionBarDialog = ImmersionBar.with(this, dialog); - mImmersionBarDialog.titleBar(toolbar) - .navigationBarColor(R.color.btn11) - .keyboardEnable(true).init(); + if (window != null) { + window.setGravity(Gravity.TOP | Gravity.START); + window.setWindowAnimations(R.style.LeftDialog); + window.setLayout(width * 2 / 3, height); + ImmersionBar.with(this, mAlertDialog) + .titleBar(toolbar) + .navigationBarColor(R.color.btn11) + .keyboardEnable(true).init(); + } break; case R.id.btn_right: - window.setGravity(Gravity.TOP | Gravity.END); - window.setWindowAnimations(R.style.RightDialog); - window.setLayout(width * 2 / 3, height); - mImmersionBarDialog = ImmersionBar.with(this, dialog); - mImmersionBarDialog.titleBar(toolbar) - .navigationBarColor(R.color.btn6) - .keyboardEnable(true) - .init(); + if (window != null) { + window.setGravity(Gravity.TOP | Gravity.END); + window.setWindowAnimations(R.style.RightDialog); + window.setLayout(width * 2 / 3, height); + ImmersionBar.with(this, mAlertDialog) + .titleBar(toolbar) + .navigationBarColor(R.color.btn6) + .keyboardEnable(true) + .init(); + } + break; + default: break; } } @Override public void onDismiss(DialogInterface dialog) { - mImmersionBar.keyboardEnable(true).init(); - if (mImmersionBarDialog != null) - mImmersionBarDialog.destroy(); + ImmersionBar.with(this).keyboardEnable(true).init(); + if (mAlertDialog != null) { + ImmersionBar.with(this, mAlertDialog).destroy(); + } } public ImmersionBar getActivityImmersionBar() { - return mImmersionBar; + return ImmersionBar.with(this); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/FlymeActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/FlymeActivity.java index 3b50d8c..619543d 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/FlymeActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/FlymeActivity.java @@ -1,8 +1,5 @@ package com.gyf.immersionbar.activity; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; @@ -11,12 +8,11 @@ import com.gyf.immersionbar.R; import butterknife.BindView; -import butterknife.ButterKnife; /** - * Created by geyifeng on 2017/5/31. + * @author geyifeng + * @date 2017/5/31 */ - public class FlymeActivity extends BaseActivity { @BindView(R.id.et) EditText et; @@ -24,26 +20,24 @@ public class FlymeActivity extends BaseActivity { Button btn; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_flyme; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.statusBarView(R.id.top_view).init(); + ImmersionBar.with(this).statusBarView(R.id.top_view).init(); } @Override protected void setListener() { - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String s = "#" + et.getText().toString(); - if (s.length() == 7) - mImmersionBar.flymeOSStatusBarFontColor(s).init(); - else - Toast.makeText(FlymeActivity.this, "请正确输入6位颜色值", Toast.LENGTH_SHORT).show(); + btn.setOnClickListener(v -> { + String s = "#" + et.getText().toString(); + if (s.length() == 7) { + ImmersionBar.with(this).flymeOSStatusBarFontColor(s).init(); + } else { + Toast.makeText(FlymeActivity.this, "请正确输入6位颜色值", Toast.LENGTH_SHORT).show(); } }); } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentActivity.java index 445c9e3..d04ccc6 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentActivity.java @@ -3,25 +3,26 @@ import android.content.Intent; import android.view.View; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.OnClick; /** - * Created by geyifeng on 2017/7/19. + * @author geyifeng + * @date 2017/7/19 */ - public class FragmentActivity extends BaseActivity { @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_fragment; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(R.id.toolbar).init(); + ImmersionBar.with(this).titleBar(R.id.toolbar).init(); } @OnClick({R.id.btn_one, R.id.btn_two, R.id.btn_three, R.id.btn_four, R.id.btn_five}) @@ -42,6 +43,8 @@ public void onClick(View view) { case R.id.btn_five: startActivity(new Intent(this, FragmentFiveActivity.class)); break; + default: + break; } } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFiveActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFiveActivity.java index 560343e..08ac8cf 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFiveActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFiveActivity.java @@ -1,13 +1,9 @@ package com.gyf.immersionbar.activity; -import android.database.ContentObserver; import android.os.Bundle; -import android.os.Handler; -import android.provider.Settings; import android.support.annotation.Nullable; import com.gyf.barlibrary.ImmersionBar; -import com.gyf.barlibrary.OSUtils; import com.gyf.immersionbar.R; import com.gyf.immersionbar.fragment.five.MainFragment; @@ -16,28 +12,17 @@ import me.yokeyword.fragmentation.anim.FragmentAnimator; /** - * Created by geyifeng on 2017/8/12. + * @author geyifeng + * @date 2017/8/12 */ - public class FragmentFiveActivity extends SupportActivity { - private ImmersionBar mImmersionBar; - private static final String NAVIGATIONBAR_IS_MIN = "navigationbar_is_min"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragmentation); - mImmersionBar = ImmersionBar.with(this); - mImmersionBar.keyboardEnable(true).navigationBarWithKitkatEnable(false).init(); - //解决华为emui3.0与3.1手机手动隐藏底部导航栏时,导航栏背景色未被隐藏的问题 - if (OSUtils.isEMUI3_1()) { - //第一种 - getContentResolver().registerContentObserver(Settings.System.getUriFor - (NAVIGATIONBAR_IS_MIN), true, mNavigationStatusObserver); - //第二种,禁止对导航栏的设置 - //mImmersionBar.navigationBarEnable(false).init(); - } + ImmersionBar.with(this).keyboardEnable(true).navigationBarWithKitkatEnable(false).init(); if (findFragment(MainFragment.class) == null) { loadRootFragment(R.id.content, MainFragment.newInstance()); } @@ -46,8 +31,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { @Override protected void onDestroy() { super.onDestroy(); - if (mImmersionBar != null) - mImmersionBar.destroy(); + ImmersionBar.with(this).destroy(); } @Override @@ -61,21 +45,4 @@ public FragmentAnimator onCreateFragmentAnimator() { // 设置横向(和安卓4.x动画相同) return new DefaultHorizontalAnimator(); } - - private ContentObserver mNavigationStatusObserver = new ContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange) { - int navigationBarIsMin = Settings.System.getInt(getContentResolver(), - NAVIGATIONBAR_IS_MIN, 0); - if (navigationBarIsMin == 1) { - //导航键隐藏了 - mImmersionBar.transparentNavigationBar().init(); - } else { - //导航键显示了 - mImmersionBar.navigationBarColor(android.R.color.black) //隐藏前导航栏的颜色 - .fullScreen(false) - .init(); - } - } - }; } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFourActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFourActivity.java index a4811d4..c963019 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFourActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentFourActivity.java @@ -5,62 +5,59 @@ import android.widget.FrameLayout; import android.widget.LinearLayout; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import com.gyf.immersionbar.fragment.four.CategoryFourFragment; import com.gyf.immersionbar.fragment.four.HomeFourFragment; import com.gyf.immersionbar.fragment.four.MineFourFragment; import com.gyf.immersionbar.fragment.four.ServiceFourFragment; -import com.gyf.immersionbar.fragment.two.MineTwoFragment; -import com.gyf.immersionbar.fragment.two.HomeTwoFragment; -import com.gyf.immersionbar.fragment.two.ServiceTwoFragment; -import com.gyf.immersionbar.fragment.two.CategoryTwoFragment; import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class FragmentFourActivity extends BaseActivity implements View.OnClickListener { @BindView(R.id.content) FrameLayout content; @BindView(R.id.ll_home) - LinearLayout ll_home; + LinearLayout llHome; @BindView(R.id.ll_category) - LinearLayout ll_category; + LinearLayout llCategory; @BindView(R.id.ll_service) - LinearLayout ll_service; + LinearLayout llService; @BindView(R.id.ll_mine) - LinearLayout ll_mine; + LinearLayout llMine; private HomeFourFragment homeFourFragment; private CategoryFourFragment categoryFourFragment; private ServiceFourFragment serviceFourFragment; private MineFourFragment mineFourFragment; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_fragment_two; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.keyboardEnable(true).init(); + ImmersionBar.with(this).keyboardEnable(true).init(); } @Override protected void initView() { selectedFragment(0); - tabSelected(ll_home); + tabSelected(llHome); } @Override protected void setListener() { - ll_home.setOnClickListener(this); - ll_category.setOnClickListener(this); - ll_service.setOnClickListener(this); - ll_mine.setOnClickListener(this); + llHome.setOnClickListener(this); + llCategory.setOnClickListener(this); + llService.setOnClickListener(this); + llMine.setOnClickListener(this); } @Override @@ -68,23 +65,25 @@ public void onClick(View v) { switch (v.getId()) { case R.id.ll_home: selectedFragment(0); - tabSelected(ll_home); - mImmersionBar.fitsSystemWindows(false).transparentStatusBar().init(); + tabSelected(llHome); + ImmersionBar.with(this).fitsSystemWindows(false).transparentStatusBar().navigationBarColor(R.color.colorPrimary).init(); break; case R.id.ll_category: selectedFragment(1); - tabSelected(ll_category); - mImmersionBar.fitsSystemWindows(true).statusBarColor(R.color.colorPrimary).init(); + tabSelected(llCategory); + ImmersionBar.with(this).fitsSystemWindows(true).barColor(R.color.btn1).init(); break; case R.id.ll_service: selectedFragment(2); - tabSelected(ll_service); - mImmersionBar.fitsSystemWindows(true).statusBarColor(R.color.colorPrimary).init(); + tabSelected(llService); + ImmersionBar.with(this).fitsSystemWindows(true).barColor(R.color.btn2).init(); break; case R.id.ll_mine: selectedFragment(3); - tabSelected(ll_mine); - mImmersionBar.fitsSystemWindows(true).statusBarColor(R.color.colorPrimary).init(); + tabSelected(llMine); + ImmersionBar.with(this).fitsSystemWindows(true).barColor(R.color.btn7).init(); + break; + default: break; } } @@ -97,50 +96,60 @@ private void selectedFragment(int position) { if (homeFourFragment == null) { homeFourFragment = new HomeFourFragment(); transaction.add(R.id.content, homeFourFragment); - } else + } else { transaction.show(homeFourFragment); + } break; case 1: if (categoryFourFragment == null) { categoryFourFragment = new CategoryFourFragment(); transaction.add(R.id.content, categoryFourFragment); - } else + } else { transaction.show(categoryFourFragment); + } break; case 2: if (serviceFourFragment == null) { serviceFourFragment = new ServiceFourFragment(); transaction.add(R.id.content, serviceFourFragment); - } else + } else { transaction.show(serviceFourFragment); + } break; case 3: if (mineFourFragment == null) { mineFourFragment = new MineFourFragment(); transaction.add(R.id.content, mineFourFragment); - } else + } else { transaction.show(mineFourFragment); + } + break; + default: break; } transaction.commit(); } private void hideFragment(FragmentTransaction transaction) { - if (homeFourFragment != null) + if (homeFourFragment != null) { transaction.hide(homeFourFragment); - if (categoryFourFragment != null) + } + if (categoryFourFragment != null) { transaction.hide(categoryFourFragment); - if (serviceFourFragment != null) + } + if (serviceFourFragment != null) { transaction.hide(serviceFourFragment); - if (mineFourFragment != null) + } + if (mineFourFragment != null) { transaction.hide(mineFourFragment); + } } private void tabSelected(LinearLayout linearLayout) { - ll_home.setSelected(false); - ll_category.setSelected(false); - ll_service.setSelected(false); - ll_mine.setSelected(false); + llHome.setSelected(false); + llCategory.setSelected(false); + llService.setSelected(false); + llMine.setSelected(false); linearLayout.setSelected(true); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentOneActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentOneActivity.java index df49e57..1275070 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentOneActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentOneActivity.java @@ -19,25 +19,25 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class FragmentOneActivity extends BaseActivity implements View.OnClickListener, ViewPager.OnPageChangeListener { @BindView(R.id.viewPager) CustomViewPager viewPager; @BindView(R.id.ll_home) - LinearLayout ll_home; + LinearLayout llHome; @BindView(R.id.ll_category) - LinearLayout ll_category; + LinearLayout llCategory; @BindView(R.id.ll_service) - LinearLayout ll_service; + LinearLayout llService; @BindView(R.id.ll_mine) - LinearLayout ll_mine; + LinearLayout llMine; private ArrayList mFragments; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_fragment_one; } @@ -58,15 +58,15 @@ protected void initData() { protected void initView() { viewPager.setAdapter(new MyAdapter(getSupportFragmentManager())); viewPager.setOffscreenPageLimit(3); - ll_home.setSelected(true); + llHome.setSelected(true); } @Override protected void setListener() { - ll_home.setOnClickListener(this); - ll_category.setOnClickListener(this); - ll_service.setOnClickListener(this); - ll_mine.setOnClickListener(this); + llHome.setOnClickListener(this); + llCategory.setOnClickListener(this); + llService.setOnClickListener(this); + llMine.setOnClickListener(this); viewPager.addOnPageChangeListener(this); } @@ -75,19 +75,21 @@ public void onClick(View v) { switch (v.getId()) { case R.id.ll_home: viewPager.setCurrentItem(0); - tabSelected(ll_home); + tabSelected(llHome); break; case R.id.ll_category: viewPager.setCurrentItem(1); - tabSelected(ll_category); + tabSelected(llCategory); break; case R.id.ll_service: viewPager.setCurrentItem(2); - tabSelected(ll_service); + tabSelected(llService); break; case R.id.ll_mine: viewPager.setCurrentItem(3); - tabSelected(ll_mine); + tabSelected(llMine); + break; + default: break; } } @@ -101,16 +103,18 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse public void onPageSelected(int position) { switch (position) { case 0: - tabSelected(ll_home); + tabSelected(llHome); break; case 1: - tabSelected(ll_category); + tabSelected(llCategory); break; case 2: - tabSelected(ll_service); + tabSelected(llService); break; case 3: - tabSelected(ll_mine); + tabSelected(llMine); + break; + default: break; } } @@ -121,10 +125,10 @@ public void onPageScrollStateChanged(int state) { } private void tabSelected(LinearLayout linearLayout) { - ll_home.setSelected(false); - ll_category.setSelected(false); - ll_service.setSelected(false); - ll_mine.setSelected(false); + llHome.setSelected(false); + llCategory.setSelected(false); + llService.setSelected(false); + llMine.setSelected(false); linearLayout.setSelected(true); } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentThreeActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentThreeActivity.java index a410d74..b5c369e 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentThreeActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentThreeActivity.java @@ -7,11 +7,8 @@ import android.view.View; import android.widget.LinearLayout; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; -import com.gyf.immersionbar.fragment.one.MineOneFragment; -import com.gyf.immersionbar.fragment.one.HomeOneFragment; -import com.gyf.immersionbar.fragment.one.ServiceOneFragment; -import com.gyf.immersionbar.fragment.one.CategoryOneFragment; import com.gyf.immersionbar.fragment.three.CategoryThreeFragment; import com.gyf.immersionbar.fragment.three.HomeThreeFragment; import com.gyf.immersionbar.fragment.three.MineThreeFragment; @@ -23,32 +20,32 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class FragmentThreeActivity extends BaseActivity implements View.OnClickListener, ViewPager.OnPageChangeListener { @BindView(R.id.viewPager) CustomViewPager viewPager; @BindView(R.id.ll_home) - LinearLayout ll_home; + LinearLayout llHome; @BindView(R.id.ll_category) - LinearLayout ll_category; + LinearLayout llCategory; @BindView(R.id.ll_service) - LinearLayout ll_service; + LinearLayout llService; @BindView(R.id.ll_mine) - LinearLayout ll_mine; + LinearLayout llMine; private ArrayList mFragments; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_fragment_one; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.keyboardEnable(true).navigationBarColor(R.color.colorPrimary).navigationBarWithKitkatEnable(false).init(); + ImmersionBar.with(this).keyboardEnable(true).navigationBarColor(R.color.colorPrimary).init(); } @Override @@ -68,15 +65,15 @@ protected void initData() { protected void initView() { viewPager.setAdapter(new MyAdapter(getSupportFragmentManager())); viewPager.setOffscreenPageLimit(3); - ll_home.setSelected(true); + llHome.setSelected(true); } @Override protected void setListener() { - ll_home.setOnClickListener(this); - ll_category.setOnClickListener(this); - ll_service.setOnClickListener(this); - ll_mine.setOnClickListener(this); + llHome.setOnClickListener(this); + llCategory.setOnClickListener(this); + llService.setOnClickListener(this); + llMine.setOnClickListener(this); viewPager.addOnPageChangeListener(this); } @@ -85,19 +82,21 @@ public void onClick(View v) { switch (v.getId()) { case R.id.ll_home: viewPager.setCurrentItem(0); - tabSelected(ll_home); + tabSelected(llHome); break; case R.id.ll_category: viewPager.setCurrentItem(1); - tabSelected(ll_category); + tabSelected(llCategory); break; case R.id.ll_service: viewPager.setCurrentItem(2); - tabSelected(ll_service); + tabSelected(llService); break; case R.id.ll_mine: viewPager.setCurrentItem(3); - tabSelected(ll_mine); + tabSelected(llMine); + break; + default: break; } } @@ -111,20 +110,22 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse public void onPageSelected(int position) { switch (position) { case 0: - tabSelected(ll_home); - mImmersionBar.statusBarDarkFont(false).navigationBarColor(R.color.colorPrimary).init(); + tabSelected(llHome); + ImmersionBar.with(this).statusBarDarkFont(false).navigationBarColor(R.color.colorPrimary).init(); break; case 1: - tabSelected(ll_category); - mImmersionBar.statusBarDarkFont(true, 0.2f).navigationBarColor(R.color.btn3).init(); + tabSelected(llCategory); + ImmersionBar.with(this).statusBarDarkFont(true, 0.2f).navigationBarColor(R.color.btn3).init(); break; case 2: - tabSelected(ll_service); - mImmersionBar.statusBarDarkFont(false).navigationBarColor(R.color.btn13).init(); + tabSelected(llService); + ImmersionBar.with(this).statusBarDarkFont(false).navigationBarColor(R.color.btn13).init(); break; case 3: - tabSelected(ll_mine); - mImmersionBar.statusBarDarkFont(true).navigationBarColor(R.color.btn1).init(); + tabSelected(llMine); + ImmersionBar.with(this).statusBarDarkFont(true).navigationBarColor(R.color.btn1).init(); + break; + default: break; } } @@ -135,10 +136,10 @@ public void onPageScrollStateChanged(int state) { } private void tabSelected(LinearLayout linearLayout) { - ll_home.setSelected(false); - ll_category.setSelected(false); - ll_service.setSelected(false); - ll_mine.setSelected(false); + llHome.setSelected(false); + llCategory.setSelected(false); + llService.setSelected(false); + llMine.setSelected(false); linearLayout.setSelected(true); } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentTwoActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentTwoActivity.java index 69fca6f..3f92a2e 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/FragmentTwoActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/FragmentTwoActivity.java @@ -6,51 +6,51 @@ import android.widget.LinearLayout; import com.gyf.immersionbar.R; -import com.gyf.immersionbar.fragment.two.MineTwoFragment; +import com.gyf.immersionbar.fragment.two.CategoryTwoFragment; import com.gyf.immersionbar.fragment.two.HomeTwoFragment; +import com.gyf.immersionbar.fragment.two.MineTwoFragment; import com.gyf.immersionbar.fragment.two.ServiceTwoFragment; -import com.gyf.immersionbar.fragment.two.CategoryTwoFragment; import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class FragmentTwoActivity extends BaseActivity implements View.OnClickListener { @BindView(R.id.content) FrameLayout content; @BindView(R.id.ll_home) - LinearLayout ll_home; + LinearLayout llHome; @BindView(R.id.ll_category) - LinearLayout ll_category; + LinearLayout llCategory; @BindView(R.id.ll_service) - LinearLayout ll_service; + LinearLayout llService; @BindView(R.id.ll_mine) - LinearLayout ll_mine; + LinearLayout llMine; private HomeTwoFragment homeTwoFragment; private CategoryTwoFragment categoryTwoFragment; private ServiceTwoFragment serviceTwoFragment; private MineTwoFragment mineTwoFragment; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_fragment_two; } @Override protected void initView() { selectedFragment(0); - tabSelected(ll_home); + tabSelected(llHome); } @Override protected void setListener() { - ll_home.setOnClickListener(this); - ll_category.setOnClickListener(this); - ll_service.setOnClickListener(this); - ll_mine.setOnClickListener(this); + llHome.setOnClickListener(this); + llCategory.setOnClickListener(this); + llService.setOnClickListener(this); + llMine.setOnClickListener(this); } @Override @@ -58,19 +58,21 @@ public void onClick(View v) { switch (v.getId()) { case R.id.ll_home: selectedFragment(0); - tabSelected(ll_home); + tabSelected(llHome); break; case R.id.ll_category: selectedFragment(1); - tabSelected(ll_category); + tabSelected(llCategory); break; case R.id.ll_service: selectedFragment(2); - tabSelected(ll_service); + tabSelected(llService); break; case R.id.ll_mine: selectedFragment(3); - tabSelected(ll_mine); + tabSelected(llMine); + break; + default: break; } } @@ -83,50 +85,60 @@ private void selectedFragment(int position) { if (homeTwoFragment == null) { homeTwoFragment = new HomeTwoFragment(); transaction.add(R.id.content, homeTwoFragment); - } else + } else { transaction.show(homeTwoFragment); + } break; case 1: if (categoryTwoFragment == null) { categoryTwoFragment = new CategoryTwoFragment(); transaction.add(R.id.content, categoryTwoFragment); - } else + } else { transaction.show(categoryTwoFragment); + } break; case 2: if (serviceTwoFragment == null) { serviceTwoFragment = new ServiceTwoFragment(); transaction.add(R.id.content, serviceTwoFragment); - } else + } else { transaction.show(serviceTwoFragment); + } break; case 3: if (mineTwoFragment == null) { mineTwoFragment = new MineTwoFragment(); transaction.add(R.id.content, mineTwoFragment); - } else + } else { transaction.show(mineTwoFragment); + } + break; + default: break; } transaction.commit(); } private void hideFragment(FragmentTransaction transaction) { - if (homeTwoFragment != null) + if (homeTwoFragment != null) { transaction.hide(homeTwoFragment); - if (categoryTwoFragment != null) + } + if (categoryTwoFragment != null) { transaction.hide(categoryTwoFragment); - if (serviceTwoFragment != null) + } + if (serviceTwoFragment != null) { transaction.hide(serviceTwoFragment); - if (mineTwoFragment != null) + } + if (mineTwoFragment != null) { transaction.hide(mineTwoFragment); + } } private void tabSelected(LinearLayout linearLayout) { - ll_home.setSelected(false); - ll_category.setSelected(false); - ll_service.setSelected(false); - ll_mine.setSelected(false); + llHome.setSelected(false); + llCategory.setSelected(false); + llService.setSelected(false); + llMine.setSelected(false); linearLayout.setSelected(true); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/KeyBoardActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/KeyBoardActivity.java index a0b1702..0549f9a 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/KeyBoardActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/KeyBoardActivity.java @@ -7,6 +7,7 @@ import android.widget.ListView; import android.widget.SimpleAdapter; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import java.util.ArrayList; @@ -17,9 +18,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class KeyBoardActivity extends BaseActivity { @BindView(R.id.line) @@ -31,15 +32,16 @@ public class KeyBoardActivity extends BaseActivity { private List> mapList; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_key_board; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(toolbar) - .keyboardEnable(true) //解决软键盘与底部输入框冲突问题 + ImmersionBar.with(this).titleBar(toolbar) + //解决软键盘与底部输入框冲突问题 + .keyboardEnable(true) .init(); // 解决软键盘与底部输入框冲突问题,或者使用以下方法,任选其一 // KeyboardPatch.patch(this).enable(); @@ -69,11 +71,6 @@ protected void initView() { @Override protected void setListener() { //toolbar返回按钮监听 - toolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); + toolbar.setNavigationOnClickListener(v -> finish()); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/MainActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/MainActivity.java index 3b18602..cf725d3 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/MainActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/MainActivity.java @@ -1,9 +1,7 @@ package com.gyf.immersionbar.activity; -import android.content.Context; +import android.annotation.SuppressLint; import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; @@ -17,12 +15,16 @@ import com.gyf.barlibrary.BarHide; import com.gyf.barlibrary.BarParams; import com.gyf.barlibrary.ImmersionBar; +import com.gyf.immersionbar.BuildConfig; import com.gyf.immersionbar.R; import butterknife.BindView; import butterknife.OnClick; import jp.wasabeef.blurry.Blurry; +/** + * @author geyifeng + */ public class MainActivity extends BaseActivity { @BindView(R.id.drawer) @@ -30,25 +32,26 @@ public class MainActivity extends BaseActivity { @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.iv_bg) - ImageView iv_bg; + ImageView ivBg; @BindView(R.id.tv_version) - TextView tv_version; + TextView tvVersion; @Override - protected void initImmersionBar() { - super.initImmersionBar(); - mImmersionBar.titleBar(R.id.toolbar).init(); + protected int getLayoutId() { + return R.layout.activity_main; } @Override - protected void initView() { - Blurry.with(this).from(BitmapFactory.decodeResource(getResources(), R.mipmap.test)).into(iv_bg); - tv_version.setText("当前版本:" + getVersionName(this)); + protected void initImmersionBar() { + super.initImmersionBar(); + ImmersionBar.with(this).titleBar(R.id.toolbar).init(); } + @SuppressLint("SetTextI18n") @Override - protected int setLayoutId() { - return R.layout.activity_main; + protected void initView() { + Blurry.with(this).from(BitmapFactory.decodeResource(getResources(), R.mipmap.test)).into(ivBg); + tvVersion.setText("当前版本:" + BuildConfig.VERSION_NAME); } @OnClick({R.id.btn_pic_color, R.id.btn_pic, R.id.btn_color, R.id.btn_shape, R.id.btn_swipe_back, R.id.btn_fragment, @@ -56,117 +59,111 @@ protected int setLayoutId() { R.id.btn_key_board, R.id.btn_white_status_bar, R.id.btn_status_hide, R.id.btn_navigation_hide, R.id.btn_bar_hide, R.id.btn_bar_show, R.id.btn_full, R.id.btn_bar_font_dark, R.id.btn_bar_font_light, R.id.ll_github, R.id.ll_jianshu}) public void onClick(View view) { + Intent intent = null; switch (view.getId()) { case R.id.btn_pic_color: - startActivity(new Intent(this, PicAndColorActivity.class)); + intent = new Intent(this, PicAndColorActivity.class); break; case R.id.btn_pic: - startActivity(new Intent(this, PicActivity.class)); + intent = new Intent(this, PicActivity.class); break; case R.id.btn_color: - startActivity(new Intent(this, ColorActivity.class)); + intent = new Intent(this, ColorActivity.class); break; case R.id.btn_shape: - startActivity(new Intent(this, ShapeActivity.class)); + intent = new Intent(this, ShapeActivity.class); break; case R.id.btn_swipe_back: - startActivity(new Intent(this, BackActivity.class)); + intent = new Intent(this, BackActivity.class); break; case R.id.btn_fragment: - startActivity(new Intent(this, FragmentActivity.class)); + intent = new Intent(this, FragmentActivity.class); break; case R.id.btn_dialog: - startActivity(new Intent(this, DialogActivity.class)); + intent = new Intent(this, DialogActivity.class); break; case R.id.btn_drawer: drawer.openDrawer(Gravity.START); break; case R.id.btn_flyme: - startActivity(new Intent(this, FlymeActivity.class)); + intent = new Intent(this, FlymeActivity.class); break; case R.id.btn_coordinator: - startActivity(new Intent(this, CoordinatorActivity.class)); + intent = new Intent(this, CoordinatorActivity.class); break; case R.id.btn_tab: - startActivity(new Intent(this, TabLayoutActivity.class)); + intent = new Intent(this, TabLayoutActivity.class); break; case R.id.btn_web: - startActivity(new Intent(this, WebActivity.class)); + intent = new Intent(this, WebActivity.class); break; case R.id.btn_action_bar: - startActivity(new Intent(this, ActionBarActivity.class)); + intent = new Intent(this, ActionBarActivity.class); break; case R.id.btn_over: - startActivity(new Intent(this, OverActivity.class)); + intent = new Intent(this, OverActivity.class); break; case R.id.btn_key_board: - startActivity(new Intent(this, KeyBoardActivity.class)); + intent = new Intent(this, KeyBoardActivity.class); break; case R.id.btn_white_status_bar: - startActivity(new Intent(this, WhiteStatusBarActivity.class)); + intent = new Intent(this, WhiteStatusBarActivity.class); break; case R.id.btn_status_hide: - mImmersionBar.hideBar(BarHide.FLAG_HIDE_STATUS_BAR).init(); + ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_STATUS_BAR).init(); break; case R.id.btn_navigation_hide: - if (ImmersionBar.hasNavigationBar(this)) + if (ImmersionBar.hasNavigationBar(this)) { ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_NAVIGATION_BAR).init(); - else + } else { Toast.makeText(this, "当前设备没有导航栏或者低于4.4系统", Toast.LENGTH_SHORT).show(); + } break; case R.id.btn_bar_hide: - mImmersionBar.hideBar(BarHide.FLAG_HIDE_BAR).init(); + ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_BAR).init(); break; case R.id.btn_bar_show: - mImmersionBar.hideBar(BarHide.FLAG_SHOW_BAR).init(); + ImmersionBar.with(this).hideBar(BarHide.FLAG_SHOW_BAR).init(); break; case R.id.btn_full: if (ImmersionBar.hasNavigationBar(this)) { - BarParams barParams = mImmersionBar.getBarParams(); - if (barParams.fullScreen) - mImmersionBar.fullScreen(false).navigationBarColor(R.color.black).init(); - else - mImmersionBar.fullScreen(true).transparentNavigationBar().init(); - } else + BarParams barParams = ImmersionBar.with(this).getBarParams(); + if (barParams.fullScreen) { + ImmersionBar.with(this).fullScreen(false).navigationBarColor(R.color.colorPrimary).init(); + } else { + ImmersionBar.with(this).fullScreen(true).transparentNavigationBar().init(); + } + } else { Toast.makeText(this, "当前设备没有导航栏或者低于4.4系统", Toast.LENGTH_SHORT).show(); + } break; case R.id.btn_bar_font_dark: - if (ImmersionBar.isSupportStatusBarDarkFont()) - mImmersionBar.statusBarDarkFont(true).init(); - else + if (ImmersionBar.isSupportStatusBarDarkFont()) { + ImmersionBar.with(this).statusBarDarkFont(true).init(); + } else { Toast.makeText(this, "当前设备不支持状态栏字体变色", Toast.LENGTH_SHORT).show(); + } break; case R.id.btn_bar_font_light: - mImmersionBar.statusBarDarkFont(false).init(); + ImmersionBar.with(this).statusBarDarkFont(false).init(); break; case R.id.ll_github: - Intent intent = new Intent(this, BlogActivity.class); + intent = new Intent(this, BlogActivity.class); Bundle bundle = new Bundle(); bundle.putString("blog", "github"); intent.putExtra("bundle", bundle); - startActivity(intent); break; case R.id.ll_jianshu: - Intent intent2 = new Intent(this, BlogActivity.class); + intent = new Intent(this, BlogActivity.class); Bundle bundle2 = new Bundle(); bundle2.putString("blog", "jianshu"); - intent2.putExtra("bundle", bundle2); - startActivity(intent2); + intent.putExtra("bundle", bundle2); + break; + default: break; } - - } - - public String getVersionName(Context context) { - PackageManager packageManager = context.getPackageManager(); - PackageInfo packageInfo; - String versionName = ""; - try { - packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); - versionName = packageInfo.versionName; - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); + if (intent != null) { + startActivity(intent); } - return versionName; } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/Over1Activity.java b/sample/src/main/java/com/gyf/immersionbar/activity/Over1Activity.java index acb03a3..098ceae 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/Over1Activity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/Over1Activity.java @@ -1,31 +1,34 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.widget.TextView; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class Over1Activity extends BaseActivity { @BindView(R.id.text) TextView textView; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_over1; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.navigationBarColor(R.color.colorPrimary).keyboardEnable(true).init(); + ImmersionBar.with(this).navigationBarColor(R.color.colorPrimary).keyboardEnable(true).init(); } + @SuppressLint("SetTextI18n") @Override protected void initView() { textView.setText("在标题栏的上方增加View标签,高度根据android版本来判断," + diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/Over2Activity.java b/sample/src/main/java/com/gyf/immersionbar/activity/Over2Activity.java index ac2f201..ac28d7c 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/Over2Activity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/Over2Activity.java @@ -1,13 +1,16 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.widget.TextView; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ public class Over2Activity extends BaseActivity { @@ -16,17 +19,17 @@ public class Over2Activity extends BaseActivity { TextView textView; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_over2; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.barColor(R.color.colorPrimary) - .init(); + ImmersionBar.with(this).barColor(R.color.colorPrimary).init(); } + @SuppressLint("SetTextI18n") @Override protected void initView() { super.initView(); diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/Over3Activity.java b/sample/src/main/java/com/gyf/immersionbar/activity/Over3Activity.java index 52389c4..e686d9d 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/Over3Activity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/Over3Activity.java @@ -1,5 +1,6 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.view.View; import android.widget.Button; import android.widget.TextView; @@ -12,9 +13,9 @@ import butterknife.OnClick; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class Over3Activity extends BaseActivity { @BindView(R.id.text) @@ -23,40 +24,43 @@ public class Over3Activity extends BaseActivity { Button button; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_over3; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.fitsSystemWindows(true) + ImmersionBar.with(this).fitsSystemWindows(true) .statusBarColor(R.color.colorPrimary) .navigationBarColor(R.color.colorPrimary) .keyboardEnable(true) .init(); } + @SuppressLint("SetTextI18n") @Override protected void initView() { textView.setText("使用ImmersionBar的fitsSystemWindows方法" + "指定fitsSystemWindows为true,然后指定状态栏的颜色,不然状态栏为透明色,很难看,详情参看此页面的实现"); } + @SuppressLint("SetTextI18n") @OnClick({R.id.btn}) public void onClick(View view) { switch (view.getId()) { case R.id.btn: BarParams barParams = ImmersionBar.with(this).getBarParams(); - if (barParams.fits){ + if (barParams.fits) { ImmersionBar.with(this).fitsSystemWindows(false).transparentStatusBar().init(); button.setText("fitsSystemWindows动态演示:false"); - } - else{ + } else { ImmersionBar.with(this).fitsSystemWindows(true).statusBarColor(R.color.colorPrimary).init(); button.setText("fitsSystemWindows动态演示:true"); } break; + default: + break; } } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/Over4Activity.java b/sample/src/main/java/com/gyf/immersionbar/activity/Over4Activity.java index b57cb7a..7a4247b 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/Over4Activity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/Over4Activity.java @@ -1,16 +1,18 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.view.View; import android.widget.TextView; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class Over4Activity extends BaseActivity { @BindView(R.id.text) @@ -19,19 +21,20 @@ public class Over4Activity extends BaseActivity { View view; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_over4; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.statusBarView(view) + ImmersionBar.with(this).statusBarView(view) .navigationBarColor(R.color.colorPrimary) .keyboardEnable(true) .init(); } + @SuppressLint("SetTextI18n") @Override protected void initView() { textView.setText("和方法一类似,都是在标题栏的上方增加View标签,但是高度指定为0dp," + diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/Over5Activity.java b/sample/src/main/java/com/gyf/immersionbar/activity/Over5Activity.java index 3c258e9..6bb8e42 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/Over5Activity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/Over5Activity.java @@ -1,16 +1,18 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.support.v7.widget.Toolbar; import android.widget.TextView; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class Over5Activity extends BaseActivity { @BindView(R.id.text) @@ -19,19 +21,20 @@ public class Over5Activity extends BaseActivity { Toolbar toolbar; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_over5; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(toolbar) + ImmersionBar.with(this).titleBar(toolbar) .navigationBarColor(R.color.colorPrimary) .keyboardEnable(true) .init(); } + @SuppressLint("SetTextI18n") @Override protected void initView() { textView.setText("不需要在xml文件增加view给状态栏预留空间,重点是这个方法titleBar(toolbar),实现原理:" + diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/Over6Activity.java b/sample/src/main/java/com/gyf/immersionbar/activity/Over6Activity.java index 0ade0f0..c0547c9 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/Over6Activity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/Over6Activity.java @@ -1,5 +1,6 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.support.v7.widget.Toolbar; import android.widget.TextView; @@ -9,9 +10,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class Over6Activity extends BaseActivity { @BindView(R.id.text) @@ -20,14 +21,14 @@ public class Over6Activity extends BaseActivity { Toolbar toolbar; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_over6; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.navigationBarColor(R.color.colorPrimary) + ImmersionBar.with(this).navigationBarColor(R.color.colorPrimary) .titleBarMarginTop(R.id.toolbar) .statusBarColor(R.color.colorPrimary) .keyboardEnable(true) @@ -38,6 +39,7 @@ protected void initImmersionBar() { } + @SuppressLint("SetTextI18n") @Override protected void initView() { textView.setText("不需要在xml文件增加view给状态栏预留空间,重点是这个方法titleBarMarginTop(toolbar),实现原理:" + diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/OverActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/OverActivity.java index 9e5fb56..c299aa3 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/OverActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/OverActivity.java @@ -10,16 +10,16 @@ import butterknife.OnClick; /** - * Created by geyifeng on 2017/5/8. + * @author geyifeng + * @date 2017/5/8 */ - public class OverActivity extends BaseActivity { @BindView(R.id.text) TextView textView; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_over; } @@ -53,6 +53,8 @@ public void onClick(View view) { case R.id.btn_six: startActivity(new Intent(this, Over6Activity.class)); break; + default: + break; } } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/PicActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/PicActivity.java index 3604c5d..5144702 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/PicActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/PicActivity.java @@ -1,5 +1,6 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.Toolbar; @@ -14,7 +15,9 @@ import me.imid.swipebacklayout.lib.app.SwipeBackActivity; /** - * Created by gyf on 2016/10/24. + * + * @author gyf + * @date 2016/10/24 */ public class PicActivity extends SwipeBackActivity { @BindView(R.id.text_view) @@ -34,6 +37,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { .transparentBar() .init(); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @SuppressLint("SetTextI18n") @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { float alpha = (float) progress / 100; diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/PicAndColorActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/PicAndColorActivity.java index 38ee219..591f64d 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/PicAndColorActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/PicAndColorActivity.java @@ -12,7 +12,8 @@ import butterknife.OnClick; /** - * Created by gyf on 2016/10/24. + * @author gyf + * @date 2016/10/24 */ public class PicAndColorActivity extends BaseActivity implements SeekBar.OnSeekBarChangeListener { @@ -22,17 +23,17 @@ public class PicAndColorActivity extends BaseActivity implements SeekBar.OnSeekB SeekBar seekBar; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_pic_color; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.statusBarView(R.id.top_view) + ImmersionBar.with(this).statusBarView(R.id.top_view) .navigationBarColor(R.color.colorPrimary) .fullScreen(true) - .addTag("PicAndColor") //给上面参数打标记,以后可以通过标记恢复 + .addTag("PicAndColor") .init(); } @@ -45,16 +46,19 @@ protected void setListener() { public void onClick(View v) { switch (v.getId()) { case R.id.btn_status_color: - mImmersionBar.statusBarColor(R.color.colorAccent).init(); + ImmersionBar.with(this).statusBarColor(R.color.colorAccent).init(); break; case R.id.btn_navigation_color: - if (ImmersionBar.hasNavigationBar(this)) - mImmersionBar.navigationBarColor(R.color.colorAccent).init(); - else + if (ImmersionBar.hasNavigationBar(this)) { + ImmersionBar.with(this).navigationBarColor(R.color.colorAccent).init(); + } else { Toast.makeText(this, "当前设备没有导航栏", Toast.LENGTH_SHORT).show(); + } break; case R.id.btn_color: - mImmersionBar.getTag("PicAndColor").init(); //根据tag标记来恢复 + ImmersionBar.with(this).getTag("PicAndColor").init(); + break; + default: break; } } @@ -62,7 +66,8 @@ public void onClick(View v) { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { float alpha = (float) progress / 100; - mImmersionBar.statusBarColorTransform(R.color.orange) + ImmersionBar.with(this) + .statusBarColorTransform(R.color.orange) .navigationBarColorTransform(R.color.tans) .addViewSupportTransformColor(toolbar) .barAlpha(alpha) diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/ShapeActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/ShapeActivity.java index 8e0299e..d12969a 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/ShapeActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/ShapeActivity.java @@ -1,22 +1,23 @@ package com.gyf.immersionbar.activity; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/6/6. + * @author geyifeng + * @date 2017/6/6 */ - public class ShapeActivity extends BaseActivity { @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_shape; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(R.id.toolbar) + ImmersionBar.with(this).titleBar(R.id.toolbar) .navigationBarColor(R.color.shape1) .init(); } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/TabLayoutActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/TabLayoutActivity.java index c6490d7..7092db7 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/TabLayoutActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/TabLayoutActivity.java @@ -1,8 +1,7 @@ package com.gyf.immersionbar.activity; import android.os.Bundle; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.CoordinatorLayout; +import android.support.annotation.NonNull; import android.support.design.widget.TabLayout; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; @@ -12,7 +11,6 @@ import android.view.ViewGroup; import android.widget.TextView; -import com.apkfuns.logutils.LogUtils; import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; @@ -22,14 +20,12 @@ import me.imid.swipebacklayout.lib.app.SwipeBackActivity; /** - * Created by geyifeng on 2017/7/4. + * @author geyifeng + * @date 2017/7/4 */ - public class TabLayoutActivity extends SwipeBackActivity { private List mData; - private Toolbar toolbar; - private ImmersionBar mImmersionBar; @Override protected void onCreate(Bundle savedInstanceState) { @@ -37,9 +33,9 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_tab_layout); initData(1); initView(); - mImmersionBar = ImmersionBar.with(this); ImmersionBar.with(this) .statusBarView(R.id.view) + .navigationBarColor(R.color.cool_green_normal) .init(); } @@ -52,7 +48,7 @@ private void initData(int pager) { private void initView() { //设置ToolBar - toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(""); //setSupportActionBar(toolbar);//替换系统的actionBar @@ -87,12 +83,11 @@ public void onTabReselected(TabLayout.Tab tab) { recyclerView.setAdapter(mAdapter); } - //RecyclerView Adapter private RecyclerView.Adapter mAdapter = new RecyclerView.Adapter() { @Override - public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new MyViewHolder(getLayoutInflater().inflate(R.layout.item_layout, parent, false)); } @@ -112,13 +107,13 @@ class MyViewHolder extends RecyclerView.ViewHolder { public MyViewHolder(View itemView) { super(itemView); - tv = (TextView) itemView.findViewById(R.id.tv_info); + tv = itemView.findViewById(R.id.tv_info); } } @Override protected void onDestroy() { super.onDestroy(); - mImmersionBar.destroy(); + ImmersionBar.with(this).destroy(); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/WebActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/WebActivity.java index e5b4043..7083e07 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/WebActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/WebActivity.java @@ -3,14 +3,15 @@ import android.webkit.WebView; import android.widget.LinearLayout; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/6/19. + * @author geyifeng + * @date 2017/6/19 */ - public class WebActivity extends BaseActivity { @BindView(R.id.web) WebView mWebView; @@ -19,15 +20,16 @@ public class WebActivity extends BaseActivity { @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_web; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(R.id.toolbar) - .keyboardEnable(true) //解决软键盘与底部输入框冲突问题 + ImmersionBar.with(this).titleBar(R.id.toolbar) + //解决软键盘与底部输入框冲突问题 + .keyboardEnable(true) .init(); } diff --git a/sample/src/main/java/com/gyf/immersionbar/activity/WhiteStatusBarActivity.java b/sample/src/main/java/com/gyf/immersionbar/activity/WhiteStatusBarActivity.java index c2f95b6..92ac082 100644 --- a/sample/src/main/java/com/gyf/immersionbar/activity/WhiteStatusBarActivity.java +++ b/sample/src/main/java/com/gyf/immersionbar/activity/WhiteStatusBarActivity.java @@ -1,5 +1,6 @@ package com.gyf.immersionbar.activity; +import android.annotation.SuppressLint; import android.view.View; import android.widget.Button; import android.widget.TextView; @@ -10,9 +11,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/6/2. + * @author geyifeng + * @date 2017/6/2 */ - public class WhiteStatusBarActivity extends BaseActivity { @BindView(R.id.btn) @@ -23,29 +24,27 @@ public class WhiteStatusBarActivity extends BaseActivity { View view; @Override - protected int setLayoutId() { + protected int getLayoutId() { return R.layout.activity_white_status_bar; } @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.statusBarView(view).init(); + ImmersionBar.with(this).statusBarView(view).init(); } + @SuppressLint("SetTextI18n") @Override protected void setListener() { - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImmersionBar.with(WhiteStatusBarActivity.this) - .statusBarDarkFont(true, 0.2f) - .init(); - text.setText("A:重点在于statusBarDarkFont(true,0.2f)这个方法," + - "原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色," + - "如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度。"); - btn.setVisibility(View.GONE); - } + btn.setOnClickListener(v -> { + ImmersionBar.with(WhiteStatusBarActivity.this) + .statusBarDarkFont(true, 0.2f) + .init(); + text.setText("A:重点在于statusBarDarkFont(true,0.2f)这个方法," + + "原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色," + + "如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度。"); + btn.setVisibility(View.GONE); }); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/adapter/OneAdapter.java b/sample/src/main/java/com/gyf/immersionbar/adapter/OneAdapter.java index 4849e77..d5e75df 100644 --- a/sample/src/main/java/com/gyf/immersionbar/adapter/OneAdapter.java +++ b/sample/src/main/java/com/gyf/immersionbar/adapter/OneAdapter.java @@ -5,9 +5,9 @@ import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/6/3. + * @author geyifeng + * @date 2017/6/3 */ - public class OneAdapter extends BaseQuickAdapter { public OneAdapter() { super(R.layout.item_one); diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/BaseNoImmersionAndNoLazyFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/BaseNoImmersionAndNoLazyFragment.java deleted file mode 100755 index c23eb7b..0000000 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/BaseNoImmersionAndNoLazyFragment.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.gyf.immersionbar.fragment; - -import com.gyf.immersionbar.fragment.two.BaseTwoFragment; - -/** - * Created by geyifeng on 2017/7/22. - */ - -public abstract class BaseNoImmersionAndNoLazyFragment extends BaseTwoFragment { - - @Override - protected boolean isImmersionBarEnabled() { - return false; - } -} diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/BaseNoImmersionFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/BaseNoImmersionFragment.java deleted file mode 100755 index c4b0eff..0000000 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/BaseNoImmersionFragment.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.gyf.immersionbar.fragment; - -import com.gyf.immersionbar.fragment.one.BaseLazyFragment; - -/** - * Created by geyifeng on 2017/7/22. - */ - -public abstract class BaseNoImmersionFragment extends BaseLazyFragment { - - @Override - protected boolean isImmersionBarEnabled() { - return false; - } -} \ No newline at end of file diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BaseDialogFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BaseDialogFragment.java index 793c485..e8ddda8 100644 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BaseDialogFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BaseDialogFragment.java @@ -5,7 +5,7 @@ import android.content.Context; import android.os.Build; import android.os.Bundle; -import android.support.annotation.IdRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.util.DisplayMetrics; @@ -22,18 +22,22 @@ /** * DialogFragment 实现沉浸式的基类 - * Created by geyifeng on 2017/8/26. + * + * @author geyifeng + * @date 2017 /8/26 */ - public abstract class BaseDialogFragment extends DialogFragment { - protected Activity mActivity; protected View mRootView; - - protected ImmersionBar mImmersionBar; protected Window mWindow; - protected int mWidth; //屏幕宽度 - protected int mHeight; //屏幕高度 + /** + * 屏幕宽度 + */ + protected int mWidth; + /** + * 屏幕高度 + */ + protected int mHeight; private Unbinder unbinder; @Override @@ -53,7 +57,8 @@ public void onCreate(Bundle savedInstanceState) { public void onStart() { super.onStart(); Dialog dialog = getDialog(); - dialog.setCanceledOnTouchOutside(true); //点击外部消失 + //点击外部消失 + dialog.setCanceledOnTouchOutside(true); mWindow = dialog.getWindow(); //测量宽高 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { @@ -70,7 +75,7 @@ public void onStart() { @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(setLayoutId(), container, false); return mRootView; } @@ -80,8 +85,9 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); - if (isImmersionBarEnabled()) + if (isImmersionBarEnabled()) { initImmersionBar(); + } initData(); initView(); setListener(); @@ -91,8 +97,7 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { public void onDestroy() { super.onDestroy(); unbinder.unbind(); - if (mImmersionBar != null) - mImmersionBar.destroy(); + ImmersionBar.with(this).destroy(); } /** @@ -115,8 +120,7 @@ protected boolean isImmersionBarEnabled() { * 初始化沉浸式 */ protected void initImmersionBar() { - mImmersionBar = ImmersionBar.with(this); - mImmersionBar.init(); + ImmersionBar.with(this).init(); } @@ -140,16 +144,4 @@ protected void initView() { protected void setListener() { } - - /** - * 找到activity的控件 - * - * @param the type parameter - * @param id the id - * @return the t - */ - @SuppressWarnings("unchecked") - protected T findActivityViewById(@IdRes int id) { - return (T) mActivity.findViewById(id); - } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BottomDialogFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BottomDialogFragment.java index 34a4e84..4ed09a7 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BottomDialogFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/BottomDialogFragment.java @@ -2,14 +2,16 @@ import android.view.Gravity; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import com.gyf.immersionbar.activity.DialogActivity; /** * 底部DialogFragment - * Created by geyifeng on 2017/7/28. + * + * @author geyifeng + * @date 2017/7/28 */ - public class BottomDialogFragment extends BaseDialogFragment { @Override @@ -28,7 +30,7 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.navigationBarColor(R.color.cool_green_normal).init(); + ImmersionBar.with(this).navigationBarColor(R.color.cool_green_normal).init(); } @Override diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/FullDialogFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/FullDialogFragment.java index 4b5b8f6..4af3a12 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/FullDialogFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/FullDialogFragment.java @@ -2,6 +2,7 @@ import android.support.v7.widget.Toolbar; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import com.gyf.immersionbar.activity.DialogActivity; @@ -9,9 +10,10 @@ /** * 全屏DialogFragment - * Created by geyifeng on 2017/7/28. + * + * @author geyifeng + * @date 2017/7/28 */ - public class FullDialogFragment extends BaseDialogFragment { @BindView(R.id.toolbar) @@ -31,7 +33,7 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar + ImmersionBar.with(this) .titleBar(toolbar) .statusBarDarkFont(true) .navigationBarColor(R.color.btn3) diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/LeftDialogFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/LeftDialogFragment.java index 0a9c2af..4679f14 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/LeftDialogFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/LeftDialogFragment.java @@ -3,6 +3,7 @@ import android.support.v7.widget.Toolbar; import android.view.Gravity; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import com.gyf.immersionbar.activity.DialogActivity; @@ -10,9 +11,10 @@ /** * 左边DialogFragment - * Created by geyifeng on 2017/7/28. + * + * @author geyifeng + * @date 2017/7/28 */ - public class LeftDialogFragment extends BaseDialogFragment { @BindView(R.id.toolbar) @@ -34,7 +36,7 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(toolbar) + ImmersionBar.with(this).titleBar(toolbar) .navigationBarColor(R.color.btn11) .keyboardEnable(true) .init(); diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/RightDialogFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/RightDialogFragment.java index d0c7dc5..ccc33c0 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/RightDialogFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/RightDialogFragment.java @@ -3,6 +3,7 @@ import android.support.v7.widget.Toolbar; import android.view.Gravity; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import com.gyf.immersionbar.activity.DialogActivity; @@ -10,9 +11,10 @@ /** * 右边DialogFragment - * Created by geyifeng on 2017/7/28. + * + * @author geyifeng + * @date 2017/7/28 */ - public class RightDialogFragment extends BaseDialogFragment { @BindView(R.id.toolbar) @@ -34,7 +36,7 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(toolbar) + ImmersionBar.with(this).titleBar(toolbar) .navigationBarColor(R.color.btn6) .keyboardEnable(true) .init(); diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/TopDialogFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/TopDialogFragment.java index 2cc8c3e..e0326f1 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/TopDialogFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/dialog/TopDialogFragment.java @@ -3,6 +3,7 @@ import android.support.v7.widget.Toolbar; import android.view.Gravity; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import com.gyf.immersionbar.activity.DialogActivity; @@ -10,9 +11,10 @@ /** * 顶部DialogFragment - * Created by geyifeng on 2017/7/28. + * + * @author geyifeng + * @date 2017/7/28 */ - public class TopDialogFragment extends BaseDialogFragment { @BindView(R.id.toolbar) @@ -34,7 +36,8 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(toolbar) + ImmersionBar.with(this) + .titleBar(toolbar) .navigationBarWithKitkatEnable(false) .init(); } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/five/BaseFiveFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/five/BaseFiveFragment.java index c0eea2a..078422c 100644 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/five/BaseFiveFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/five/BaseFiveFragment.java @@ -3,7 +3,7 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.IdRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; @@ -19,13 +19,13 @@ /** * 基于Fragmentation框架实现沉浸式,如果要在Fragment实现沉浸式,请在onSupportVisible实现沉浸式, * 至于解决布局重叠问题,建议使用readme里第四种或者第五种,参考onViewCreated方法 - * Created by geyifeng on 2017/8/12. + * + * @author geyifeng + * @date 2017/8/12 */ - public abstract class BaseFiveFragment extends SupportFragment { protected Activity mActivity; protected View mRootView; - protected ImmersionBar mImmersionBar; private Unbinder unbinder; @Override @@ -36,23 +36,19 @@ public void onAttach(Context context) { @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(setLayoutId(), container, false); return mRootView; } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); - if (view != null) { - View titleBar = view.findViewById(setTitleBar()); - if (titleBar != null) - ImmersionBar.setTitleBar(mActivity, titleBar); - View statusBarView = view.findViewById(setStatusBarView()); - if (statusBarView != null) - ImmersionBar.setStatusBarView(mActivity, statusBarView); - } + View titleBar = view.findViewById(setTitleBar()); + ImmersionBar.setTitleBar(mActivity, titleBar); + View statusBarView = view.findViewById(setStatusBarView()); + ImmersionBar.setStatusBarView(mActivity, statusBarView); initData(); initView(); setListener(); @@ -69,10 +65,13 @@ protected int setStatusBarView() { @Override public void onSupportVisible() { super.onSupportVisible(); - //如果要在Fragment单独使用沉浸式,请在onSupportVisible实现沉浸式 + //请在onSupportVisible实现沉浸式 + initImmersionBar(); + } + + public void initImmersionBar() { if (isImmersionBarEnabled()) { - mImmersionBar = ImmersionBar.with(this); - mImmersionBar.navigationBarWithKitkatEnable(false).init(); + ImmersionBar.with(this).init(); } } @@ -84,8 +83,7 @@ private boolean isImmersionBarEnabled() { public void onDestroy() { super.onDestroy(); unbinder.unbind(); - if (mImmersionBar != null) - mImmersionBar.destroy(); + ImmersionBar.with(this).destroy(); } /** @@ -115,16 +113,4 @@ protected void initView() { protected void setListener() { } - - /** - * 找到activity的控件 - * - * @param the type parameter - * @param id the id - * @return the t - */ - @SuppressWarnings("unchecked") - protected T findActivityViewById(@IdRes int id) { - return (T) mActivity.findViewById(id); - } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/five/CategoryFiveFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/five/CategoryFiveFragment.java index 533b36b..0540bc0 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/five/CategoryFiveFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/five/CategoryFiveFragment.java @@ -2,12 +2,13 @@ import android.os.Bundle; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class CategoryFiveFragment extends BaseFiveFragment { public static CategoryFiveFragment newInstance() { @@ -21,4 +22,10 @@ public static CategoryFiveFragment newInstance() { protected int setLayoutId() { return R.layout.fragment_two_category; } + + @Override + public void initImmersionBar() { + super.initImmersionBar(); + ImmersionBar.with(this).navigationBarColor(R.color.btn1).init(); + } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/five/HomeFiveFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/five/HomeFiveFragment.java index 593f441..cee41e2 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/five/HomeFiveFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/five/HomeFiveFragment.java @@ -1,18 +1,18 @@ package com.gyf.immersionbar.fragment.five; +import android.annotation.SuppressLint; import android.os.Bundle; -import android.support.v7.widget.Toolbar; -import android.view.View; import android.widget.TextView; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class HomeFiveFragment extends BaseFiveFragment { @BindView(R.id.text) TextView text; @@ -29,6 +29,13 @@ protected int setLayoutId() { return R.layout.fragment_two_home; } + @Override + public void initImmersionBar() { + super.initImmersionBar(); + ImmersionBar.with(this).navigationBarColor(R.color.colorPrimary).init(); + } + + @SuppressLint("SetTextI18n") @Override protected void initView() { super.initView(); diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/five/MainFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/five/MainFragment.java index 0664d50..f981acf 100644 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/five/MainFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/five/MainFragment.java @@ -5,26 +5,25 @@ import android.view.View; import android.widget.LinearLayout; -import com.apkfuns.logutils.LogUtils; import com.gyf.immersionbar.R; import butterknife.BindView; import me.yokeyword.fragmentation.SupportFragment; /** - * Created by geyifeng on 2017/8/12. + * @author geyifeng + * @date 2017/8/12 */ - public class MainFragment extends BaseFiveFragment implements View.OnClickListener { @BindView(R.id.ll_home) - LinearLayout ll_home; + LinearLayout llHome; @BindView(R.id.ll_category) - LinearLayout ll_category; + LinearLayout llCategory; @BindView(R.id.ll_service) - LinearLayout ll_service; + LinearLayout llService; @BindView(R.id.ll_mine) - LinearLayout ll_mine; + LinearLayout llMine; private SupportFragment[] mFragments = new SupportFragment[4]; @@ -72,15 +71,15 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { @Override protected void initView() { - tabSelected(ll_home); + tabSelected(llHome); } @Override protected void setListener() { - ll_home.setOnClickListener(this); - ll_category.setOnClickListener(this); - ll_service.setOnClickListener(this); - ll_mine.setOnClickListener(this); + llHome.setOnClickListener(this); + llCategory.setOnClickListener(this); + llService.setOnClickListener(this); + llMine.setOnClickListener(this); } @Override @@ -88,28 +87,30 @@ public void onClick(View v) { switch (v.getId()) { case R.id.ll_home: showHideFragment(mFragments[HOME]); - tabSelected(ll_home); + tabSelected(llHome); break; case R.id.ll_category: showHideFragment(mFragments[CATEGORY]); - tabSelected(ll_category); + tabSelected(llCategory); break; case R.id.ll_service: showHideFragment(mFragments[SERVICE]); - tabSelected(ll_service); + tabSelected(llService); break; case R.id.ll_mine: showHideFragment(mFragments[MINE]); - tabSelected(ll_mine); + tabSelected(llMine); + break; + default: break; } } private void tabSelected(LinearLayout linearLayout) { - ll_home.setSelected(false); - ll_category.setSelected(false); - ll_service.setSelected(false); - ll_mine.setSelected(false); + llHome.setSelected(false); + llCategory.setSelected(false); + llService.setSelected(false); + llMine.setSelected(false); linearLayout.setSelected(true); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/five/MineFiveFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/five/MineFiveFragment.java index de28b40..2825a34 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/five/MineFiveFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/five/MineFiveFragment.java @@ -2,12 +2,14 @@ import android.os.Bundle; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/7/20. + * + * @author geyifeng + * @date 2017/7/20 */ - public class MineFiveFragment extends BaseFiveFragment { public static MineFiveFragment newInstance() { @@ -22,4 +24,10 @@ protected int setLayoutId() { return R.layout.fragment_two_mine; } + @Override + public void initImmersionBar() { + super.initImmersionBar(); + ImmersionBar.with(this).navigationBarColor(R.color.btn7).init(); + } + } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/five/ServiceFiveFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/five/ServiceFiveFragment.java index 4539d85..e530bf0 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/five/ServiceFiveFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/five/ServiceFiveFragment.java @@ -2,12 +2,13 @@ import android.os.Bundle; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class ServiceFiveFragment extends BaseFiveFragment { public static ServiceFiveFragment newInstance() { @@ -21,4 +22,10 @@ public static ServiceFiveFragment newInstance() { protected int setLayoutId() { return R.layout.fragment_two_service; } + + @Override + public void initImmersionBar() { + super.initImmersionBar(); + ImmersionBar.with(this).navigationBarColor(R.color.btn2).init(); + } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/four/BaseFourFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/four/BaseFourFragment.java index 512bc69..2d47b96 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/four/BaseFourFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/four/BaseFourFragment.java @@ -3,7 +3,7 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.IdRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; @@ -14,8 +14,10 @@ import butterknife.Unbinder; /** - * Fragment的基类,禁止懒加载功能 - * Created by geyifeng on 2017/4/7. + * Fragment的基类 + * + * @author geyifeng + * @date 2017/4/7 */ public abstract class BaseFourFragment extends Fragment { @@ -31,13 +33,13 @@ public void onAttach(Context context) { @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(setLayoutId(), container, false); return mRootView; } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); initData(); @@ -78,16 +80,4 @@ protected void initView() { protected void setListener() { } - - /** - * 找到activity的控件 - * - * @param the type parameter - * @param id the id - * @return the t - */ - @SuppressWarnings("unchecked") - protected T findActivityViewById(@IdRes int id) { - return (T) mActivity.findViewById(id); - } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/four/CategoryFourFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/four/CategoryFourFragment.java index e95982b..2eb095f 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/four/CategoryFourFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/four/CategoryFourFragment.java @@ -3,9 +3,9 @@ import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class CategoryFourFragment extends BaseFourFragment { @Override protected int setLayoutId() { diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/four/HomeFourFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/four/HomeFourFragment.java index 3dd889f..a6c0798 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/four/HomeFourFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/four/HomeFourFragment.java @@ -8,9 +8,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class HomeFourFragment extends BaseFourFragment { @BindView(R.id.toolbar) Toolbar toolbar; diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/four/MineFourFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/four/MineFourFragment.java index c4c1966..6be695b 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/four/MineFourFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/four/MineFourFragment.java @@ -3,9 +3,9 @@ import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class MineFourFragment extends BaseFourFragment { @Override protected int setLayoutId() { diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/four/ServiceFourFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/four/ServiceFourFragment.java index 7b16f64..49a6210 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/four/ServiceFourFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/four/ServiceFourFragment.java @@ -3,9 +3,9 @@ import com.gyf.immersionbar.R; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class ServiceFourFragment extends BaseFourFragment { @Override protected int setLayoutId() { diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/one/BaseLazyFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/one/BaseLazyFragment.java index a2de50e..207f27e 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/one/BaseLazyFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/one/BaseLazyFragment.java @@ -3,26 +3,33 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.IdRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; -import android.util.Log; +import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.apkfuns.logutils.LogUtils; import com.gyf.barlibrary.ImmersionBar; +import com.gyf.immersionbar.R; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; /** * 当使用viewpager加载Fragment,沉浸式的使用,原理懒加载 - * Created by geyifeng on 2017/4/7. + * + * @author geyifeng + * @date 2017/4/7 */ public abstract class BaseLazyFragment extends Fragment { + + @BindView(R.id.toolbar) + Toolbar toolbar; + protected Activity mActivity; protected View mRootView; @@ -42,7 +49,6 @@ public abstract class BaseLazyFragment extends Fragment { */ protected boolean mIsImmersion; - protected ImmersionBar mImmersionBar; private Unbinder unbinder; @Override @@ -53,23 +59,25 @@ public void onAttach(Context context) { @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(setLayoutId(), container, false); return mRootView; } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, mRootView); + ImmersionBar.setTitleBar(mActivity, toolbar); if (isLazyLoad()) { mIsPrepare = true; mIsImmersion = true; onLazyLoad(); } else { initData(); - if (isImmersionBarEnabled()) + if (isImmersionBarEnabled()) { initImmersionBar(); + } } initView(); setListener(); @@ -79,8 +87,7 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { public void onDestroy() { super.onDestroy(); unbinder.unbind(); - if (mImmersionBar != null) - mImmersionBar.destroy(); + ImmersionBar.with(this).destroy(); } @Override @@ -149,8 +156,7 @@ protected void initData() { * 初始化沉浸式 */ protected void initImmersionBar() { - mImmersionBar = ImmersionBar.with(this); - mImmersionBar.keyboardEnable(true).navigationBarWithKitkatEnable(false).init(); + ImmersionBar.with(this).keyboardEnable(true).init(); } /** @@ -173,17 +179,4 @@ protected void setListener() { protected void onInvisible() { } - - /** - * 找到activity的控件 - * - * @param the type parameter - * @param id the id - * @return the t - */ - @SuppressWarnings("unchecked") - protected T findActivityViewById(@IdRes int id) { - return (T) mActivity.findViewById(id); - } - } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/one/CategoryOneFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/one/CategoryOneFragment.java index 49c08e2..989a585 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/one/CategoryOneFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/one/CategoryOneFragment.java @@ -1,30 +1,14 @@ package com.gyf.immersionbar.fragment.one; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.Toolbar; -import android.view.View; - import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; -import butterknife.BindView; - /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class CategoryOneFragment extends BaseLazyFragment { - @BindView(R.id.toolbar) - Toolbar toolbar; - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - ImmersionBar.setTitleBar(getActivity(), toolbar); - } - @Override protected int setLayoutId() { return R.layout.fragment_one_category; @@ -33,7 +17,8 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.statusBarDarkFont(true, 0.2f) + ImmersionBar.with(this) + .statusBarDarkFont(true, 0.2f) .navigationBarColor(R.color.btn3) .init(); } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/one/HomeOneFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/one/HomeOneFragment.java index 76babe4..06fd969 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/one/HomeOneFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/one/HomeOneFragment.java @@ -2,9 +2,8 @@ import android.content.Intent; import android.graphics.Color; -import android.os.Bundle; import android.os.Handler; -import android.support.annotation.Nullable; +import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v4.graphics.ColorUtils; import android.support.v7.widget.LinearLayoutManager; @@ -31,9 +30,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class HomeOneFragment extends BaseLazyFragment { @BindView(R.id.toolbar) @@ -48,13 +47,6 @@ public class HomeOneFragment extends BaseLazyFragment { private List mItemList = new ArrayList<>(); private List mImages = new ArrayList<>(); private int bannerHeight; - private View headView; - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - ImmersionBar.setTitleBar(getActivity(), mToolbar); - } @Override protected int setLayoutId() { @@ -88,8 +80,8 @@ protected void initView() { private void addHeaderView() { if (mImages != null && mImages.size() > 0) { - headView = LayoutInflater.from(mActivity).inflate(R.layout.item_banner, (ViewGroup) mRv.getParent(), false); - Banner banner = (Banner) headView.findViewById(R.id.banner); + View headView = LayoutInflater.from(mActivity).inflate(R.layout.item_banner, (ViewGroup) mRv.getParent(), false); + Banner banner = headView.findViewById(R.id.banner); banner.setImages(mImages) .setImageLoader(new GlideImageLoader()) .setDelayTime(5000) @@ -107,7 +99,7 @@ protected void setListener() { private int totalDy = 0; @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); totalDy += dy; if (totalDy <= bannerHeight) { @@ -118,47 +110,25 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { mToolbar.setBackgroundColor(ColorUtils.blendARGB(Color.TRANSPARENT , ContextCompat.getColor(mActivity, R.color.colorPrimary), 1)); } - //在Fragment里使用的时候,并且加载Fragment的Activity配置了android:configChanges="orientation|keyboardHidden|screenSize"属性时, - //不建议使用ImmersionBar里的addViewSupportTransformColor()方法实现标题滑动渐变 - //原因是会导致影响其他页面的沉浸式效果,除非每个页面的沉浸式参数都一样 -// mImmersionBar.addViewSupportTransformColor(mToolbar, R.color.colorPrimary); -// if (totalDy <= bannerHeight) { -// float alpha = (float) totalDy / bannerHeight; -// mImmersionBar.statusBarAlpha(alpha) -// .init(); -// } else { -// mImmersionBar.statusBarAlpha(1.0f) -// .init(); -// } } }); - mOneAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { - @Override - public void onLoadMoreRequested() { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - mOneAdapter.addData(addData()); - if (mItemList.size() == 100) { - mOneAdapter.loadMoreEnd(); - } else - mOneAdapter.loadMoreComplete(); - } - }, 2000); + mOneAdapter.setOnLoadMoreListener(() -> new Handler().postDelayed(() -> { + mOneAdapter.addData(addData()); + if (mItemList.size() == 100) { + mOneAdapter.loadMoreEnd(); + } else { + mOneAdapter.loadMoreComplete(); } - }, mRv); + }, 2000), mRv); refreshLayout.setOnRefreshListener(new RefreshListenerAdapter() { @Override public void onRefresh(final TwinklingRefreshLayout refreshLayout) { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - mItemList.clear(); - mItemList.addAll(newData()); - mOneAdapter.setNewData(mItemList); - refreshLayout.finishRefreshing(); - mToolbar.setVisibility(View.VISIBLE); - } + new Handler().postDelayed(() -> { + mItemList.clear(); + mItemList.addAll(newData()); + mOneAdapter.setNewData(mItemList); + refreshLayout.finishRefreshing(); + mToolbar.setVisibility(View.VISIBLE); }, 2000); } @@ -177,12 +147,7 @@ public void onPullDownReleasing(TwinklingRefreshLayout refreshLayout, float frac } }); - mLlScan.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - startActivity(new Intent(getActivity(), FragmentOneActivity.class)); - } - }); + mLlScan.setOnClickListener(v -> startActivity(new Intent(getActivity(), FragmentOneActivity.class))); } private List addData() { @@ -204,7 +169,7 @@ private List newData() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.statusBarColorTransformEnable(false) + ImmersionBar.with(this).statusBarColorTransformEnable(false) .navigationBarColor(R.color.colorPrimary) .init(); } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/one/MineOneFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/one/MineOneFragment.java index e36a83a..6f1167e 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/one/MineOneFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/one/MineOneFragment.java @@ -1,30 +1,14 @@ package com.gyf.immersionbar.fragment.one; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.Toolbar; -import android.view.View; - import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; -import butterknife.BindView; - /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class MineOneFragment extends BaseLazyFragment { - @BindView(R.id.toolbar) - Toolbar toolbar; - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - ImmersionBar.setTitleBar(getActivity(), toolbar); - } - @Override protected int setLayoutId() { return R.layout.fragment_one_mine; diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/one/ServiceOneFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/one/ServiceOneFragment.java index 5163f6b..bf3701f 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/one/ServiceOneFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/one/ServiceOneFragment.java @@ -1,30 +1,14 @@ package com.gyf.immersionbar.fragment.one; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.widget.Toolbar; -import android.view.View; - import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; -import butterknife.BindView; - /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class ServiceOneFragment extends BaseLazyFragment { - @BindView(R.id.toolbar) - Toolbar toolbar; - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - ImmersionBar.setTitleBar(getActivity(), toolbar); - } - @Override protected int setLayoutId() { return R.layout.fragment_one_service; diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/three/BaseThreeFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/three/BaseThreeFragment.java index 046a715..ed22c6d 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/three/BaseThreeFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/three/BaseThreeFragment.java @@ -3,21 +3,20 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.IdRes; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.gyf.barlibrary.ImmersionBar; - import butterknife.ButterKnife; import butterknife.Unbinder; /** - * Fragment的基类,禁止懒加载功能 - * Created by geyifeng on 2017/4/7. + * Fragment的基类 + * + * @author geyifeng + * @date 2017/4/7 */ public abstract class BaseThreeFragment extends Fragment { @@ -80,16 +79,4 @@ protected void initView() { protected void setListener() { } - - /** - * 找到activity的控件 - * - * @param the type parameter - * @param id the id - * @return the t - */ - @SuppressWarnings("unchecked") - protected T findActivityViewById(@IdRes int id) { - return (T) mActivity.findViewById(id); - } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/three/CategoryThreeFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/three/CategoryThreeFragment.java index a80aa32..b547852 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/three/CategoryThreeFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/three/CategoryThreeFragment.java @@ -11,9 +11,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class CategoryThreeFragment extends BaseThreeFragment { @BindView(R.id.toolbar) diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/three/HomeThreeFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/three/HomeThreeFragment.java index 9e35c0e..641a977 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/three/HomeThreeFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/three/HomeThreeFragment.java @@ -28,9 +28,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class HomeThreeFragment extends BaseThreeFragment { @BindView(R.id.toolbar) @@ -43,7 +43,6 @@ public class HomeThreeFragment extends BaseThreeFragment { private List mItemList = new ArrayList<>(); private List mImages = new ArrayList<>(); private int bannerHeight; - private View headView; @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { @@ -83,8 +82,8 @@ protected void initView() { private void addHeaderView() { if (mImages != null && mImages.size() > 0) { - headView = LayoutInflater.from(mActivity).inflate(R.layout.item_banner, (ViewGroup) mRv.getParent(), false); - Banner banner = (Banner) headView.findViewById(R.id.banner); + View headView = LayoutInflater.from(mActivity).inflate(R.layout.item_banner, (ViewGroup) mRv.getParent(), false); + Banner banner = headView.findViewById(R.id.banner); banner.setImages(mImages) .setImageLoader(new GlideImageLoader()) .setDelayTime(5000) @@ -115,33 +114,23 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { } } }); - mOneAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { - @Override - public void onLoadMoreRequested() { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - mOneAdapter.addData(addData()); - if (mItemList.size() == 100) { - mOneAdapter.loadMoreEnd(); - } else - mOneAdapter.loadMoreComplete(); - } - }, 2000); + mOneAdapter.setOnLoadMoreListener(() -> new Handler().postDelayed(() -> { + mOneAdapter.addData(addData()); + if (mItemList.size() == 100) { + mOneAdapter.loadMoreEnd(); + } else { + mOneAdapter.loadMoreComplete(); } - }, mRv); + }, 2000), mRv); refreshLayout.setOnRefreshListener(new RefreshListenerAdapter() { @Override public void onRefresh(final TwinklingRefreshLayout refreshLayout) { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - mItemList.clear(); - mItemList.addAll(newData()); - mOneAdapter.setNewData(mItemList); - refreshLayout.finishRefreshing(); - mToolbar.setVisibility(View.VISIBLE); - } + new Handler().postDelayed(() -> { + mItemList.clear(); + mItemList.addAll(newData()); + mOneAdapter.setNewData(mItemList); + refreshLayout.finishRefreshing(); + mToolbar.setVisibility(View.VISIBLE); }, 2000); } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/three/MineThreeFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/three/MineThreeFragment.java index e58e5ce..b68c065 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/three/MineThreeFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/three/MineThreeFragment.java @@ -11,9 +11,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class MineThreeFragment extends BaseThreeFragment { @BindView(R.id.toolbar) diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/three/ServiceThreeFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/three/ServiceThreeFragment.java index ee62005..fef5726 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/three/ServiceThreeFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/three/ServiceThreeFragment.java @@ -11,9 +11,9 @@ import butterknife.BindView; /** - * Created by geyifeng on 2017/5/12. + * @author geyifeng + * @date 2017/5/12 */ - public class ServiceThreeFragment extends BaseThreeFragment { @BindView(R.id.toolbar) diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/two/BaseTwoFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/two/BaseTwoFragment.java index 7f52b26..4aee5d7 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/two/BaseTwoFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/two/BaseTwoFragment.java @@ -3,7 +3,7 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.IdRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; @@ -17,14 +17,15 @@ /** * 当以show()和hide()方法形式加载Fragment,沉浸式的使用 - * Created by geyifeng on 2017/4/7. + * + * @author geyifeng + * @date 2017/4/7 */ public abstract class BaseTwoFragment extends Fragment { protected Activity mActivity; protected View mRootView; - protected ImmersionBar mImmersionBar; private Unbinder unbinder; @Override @@ -35,17 +36,18 @@ public void onAttach(Context context) { @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mRootView = inflater.inflate(setLayoutId(), container, false); return mRootView; } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); - if (isImmersionBarEnabled()) + if (isImmersionBarEnabled()) { initImmersionBar(); + } initData(); initView(); setListener(); @@ -55,15 +57,17 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { public void onDestroy() { super.onDestroy(); unbinder.unbind(); - if (mImmersionBar != null) - mImmersionBar.destroy(); + if (isImmersionBarEnabled()) { + ImmersionBar.with(this).destroy(); + } } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); - if (!hidden && mImmersionBar != null) - mImmersionBar.init(); + if (isImmersionBarEnabled() && !hidden) { + ImmersionBar.with(this).init(); + } } /** @@ -86,8 +90,7 @@ protected boolean isImmersionBarEnabled() { * 初始化沉浸式 */ protected void initImmersionBar() { - mImmersionBar = ImmersionBar.with(this); - mImmersionBar.keyboardEnable(true).navigationBarWithKitkatEnable(false).init(); + ImmersionBar.with(this).keyboardEnable(true).init(); } @@ -111,16 +114,4 @@ protected void initView() { protected void setListener() { } - - /** - * 找到activity的控件 - * - * @param the type parameter - * @param id the id - * @return the t - */ - @SuppressWarnings("unchecked") - protected T findActivityViewById(@IdRes int id) { - return (T) mActivity.findViewById(id); - } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/two/CategoryTwoFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/two/CategoryTwoFragment.java index 956d30d..b4123a4 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/two/CategoryTwoFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/two/CategoryTwoFragment.java @@ -2,12 +2,14 @@ import android.support.v7.widget.Toolbar; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ public class CategoryTwoFragment extends BaseTwoFragment { @@ -22,10 +24,9 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar + ImmersionBar.with(this) .titleBar(toolbar) + .navigationBarColor(R.color.btn1) .init(); - //或者 - //ImmersionBar.setTitleBar(getActivity(),toolbar); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/two/HomeTwoFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/two/HomeTwoFragment.java index 7a5e1e9..b8b34d1 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/two/HomeTwoFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/two/HomeTwoFragment.java @@ -2,12 +2,14 @@ import android.support.v7.widget.Toolbar; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ public class HomeTwoFragment extends BaseTwoFragment { @@ -22,6 +24,9 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar.titleBar(toolbar).init(); + ImmersionBar.with(this) + .titleBar(toolbar) + .navigationBarColor(R.color.colorPrimary) + .init(); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/two/MineTwoFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/two/MineTwoFragment.java index c411480..09a0321 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/two/MineTwoFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/two/MineTwoFragment.java @@ -2,12 +2,15 @@ import android.support.v7.widget.Toolbar; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * + * @author geyifeng + * @date 2017/7/20 */ public class MineTwoFragment extends BaseTwoFragment { @@ -22,10 +25,9 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar + ImmersionBar.with(this) .titleBar(toolbar) + .navigationBarColor(R.color.btn7) .init(); - //或者 - //ImmersionBar.setTitleBar(getActivity(),toolbar); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/fragment/two/ServiceTwoFragment.java b/sample/src/main/java/com/gyf/immersionbar/fragment/two/ServiceTwoFragment.java index 0331aa5..de4f6e3 100755 --- a/sample/src/main/java/com/gyf/immersionbar/fragment/two/ServiceTwoFragment.java +++ b/sample/src/main/java/com/gyf/immersionbar/fragment/two/ServiceTwoFragment.java @@ -2,14 +2,15 @@ import android.support.v7.widget.Toolbar; +import com.gyf.barlibrary.ImmersionBar; import com.gyf.immersionbar.R; import butterknife.BindView; /** - * Created by geyifeng on 2017/7/20. + * @author geyifeng + * @date 2017/7/20 */ - public class ServiceTwoFragment extends BaseTwoFragment { @BindView(R.id.toolbar) Toolbar toolbar; @@ -22,10 +23,10 @@ protected int setLayoutId() { @Override protected void initImmersionBar() { super.initImmersionBar(); - mImmersionBar + ImmersionBar.with(this) .titleBar(toolbar) + .statusBarDarkFont(true, 0.2f) + .navigationBarColor(R.color.btn2) .init(); - //或者 - //ImmersionBar.setTitleBar(getActivity(),toolbar); } } diff --git a/sample/src/main/java/com/gyf/immersionbar/utils/GlideImageLoader.java b/sample/src/main/java/com/gyf/immersionbar/utils/GlideImageLoader.java index 8ebb7c0..977c832 100644 --- a/sample/src/main/java/com/gyf/immersionbar/utils/GlideImageLoader.java +++ b/sample/src/main/java/com/gyf/immersionbar/utils/GlideImageLoader.java @@ -4,21 +4,20 @@ import android.widget.ImageView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.request.RequestOptions; import com.gyf.immersionbar.R; import com.youth.banner.loader.ImageLoader; /** - * Created by geyifeng on 2017/6/4. + * @author geyifeng + * @date 2017/6/4 */ - public class GlideImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context.getApplicationContext()) .load(path) - .diskCacheStrategy(DiskCacheStrategy.SOURCE) - .placeholder(R.mipmap.test) + .apply(new RequestOptions().placeholder(R.mipmap.test)) .into(imageView); } diff --git a/sample/src/main/java/com/gyf/immersionbar/view/CustomViewPager.java b/sample/src/main/java/com/gyf/immersionbar/view/CustomViewPager.java index ad6eaf6..fd87731 100644 --- a/sample/src/main/java/com/gyf/immersionbar/view/CustomViewPager.java +++ b/sample/src/main/java/com/gyf/immersionbar/view/CustomViewPager.java @@ -7,9 +7,10 @@ /** * 设置viewpager不可滑动 默认可以滑动 - * Created by geyifeng on 2017/1/14. + * + * @author geyifeng + * @date 2017/1/14 */ - public class CustomViewPager extends ViewPager { private boolean isScroll = true; @@ -43,6 +44,6 @@ public boolean onInterceptTouchEvent(MotionEvent ev) { @Override public void setCurrentItem(int item) { - setCurrentItem(item,false); + setCurrentItem(item, false); } } diff --git a/sample/src/main/res/layout/fragment_two_category.xml b/sample/src/main/res/layout/fragment_two_category.xml index 667fb85..f348f6d 100644 --- a/sample/src/main/res/layout/fragment_two_category.xml +++ b/sample/src/main/res/layout/fragment_two_category.xml @@ -8,7 +8,7 @@ android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?actionBarSize" - android:background="@color/colorPrimary" /> + android:background="@color/btn1" /> + android:background="@color/btn7" /> + android:background="@color/btn2" />