Skip to content

Commit

Permalink
修正vivo全面屏和android10导航栏高度
Browse files Browse the repository at this point in the history
  • Loading branch information
geyifeng committed Dec 6, 2019
1 parent c19f091 commit b13900a
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 49 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.3.61'
ext.immersionbar_version = '3.0.0'
repositories {
google()
jcenter()
}
dependencies {

classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.android.tools.build:gradle:3.5.3'
classpath 'com.novoda:bintray-release:0.9.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package com.gyf.immersionbar.ktx

import android.app.Activity
import android.app.Dialog
import android.view.View
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import android.view.View
import com.gyf.immersionbar.ImmersionBar

/**
Expand All @@ -15,89 +15,93 @@ import com.gyf.immersionbar.ImmersionBar
// 初始化ImmersionBar
inline fun Activity.immersionBar(block: ImmersionBar.() -> Unit) = ImmersionBar.with(this).apply { block(this) }.init()

inline fun androidx.fragment.app.Fragment.immersionBar(block: ImmersionBar.() -> Unit) = ImmersionBar.with(this).apply { block(this) }.init()
inline fun Fragment.immersionBar(block: ImmersionBar.() -> Unit) = ImmersionBar.with(this).apply { block(this) }.init()

inline fun android.app.Fragment.immersionBar(block: ImmersionBar.() -> Unit) = ImmersionBar.with(this).apply { block(this) }.init()

inline fun androidx.fragment.app.DialogFragment.immersionBar(block: ImmersionBar.() -> Unit) = ImmersionBar.with(this).apply { block(this) }.init()
inline fun DialogFragment.immersionBar(block: ImmersionBar.() -> Unit) = ImmersionBar.with(this).apply { block(this) }.init()

inline fun android.app.DialogFragment.immersionBar(block: ImmersionBar.() -> Unit) = ImmersionBar.with(this).apply { block(this) }.init()

inline fun Dialog.immersionBar(activity: Activity, block: ImmersionBar.() -> Unit) = ImmersionBar.with(activity, this).apply { block(this) }.init()

inline fun Activity.immersionBar(dialog: Dialog, block: ImmersionBar.() -> Unit) = ImmersionBar.with(this, dialog).apply { block(this) }.init()

inline fun androidx.fragment.app.Fragment.immersionBar(dialog: Dialog, block: ImmersionBar.() -> Unit) = activity?.run { ImmersionBar.with(this, dialog).apply { block(this) }.init() }
inline fun Fragment.immersionBar(dialog: Dialog, block: ImmersionBar.() -> Unit) = activity?.run { ImmersionBar.with(this, dialog).apply { block(this) }.init() }
?: Unit

inline fun android.app.Fragment.immersionBar(dialog: Dialog, block: ImmersionBar.() -> Unit) = activity?.run { ImmersionBar.with(this, dialog).apply { block(this) }.init() }
?: Unit

fun Activity.immersionBar() = immersionBar { }

fun androidx.fragment.app.Fragment.immersionBar() = immersionBar { }
fun Fragment.immersionBar() = immersionBar { }

fun android.app.Fragment.immersionBar() = immersionBar { }

fun androidx.fragment.app.DialogFragment.immersionBar() = immersionBar { }
fun DialogFragment.immersionBar() = immersionBar { }

fun android.app.DialogFragment.immersionBar() = immersionBar { }

fun Dialog.immersionBar(activity: Activity) = immersionBar(activity) {}

fun Activity.immersionBar(dialog: Dialog) = immersionBar(dialog) {}

fun androidx.fragment.app.Fragment.immersionBar(dialog: Dialog) = immersionBar(dialog) {}
fun Fragment.immersionBar(dialog: Dialog) = immersionBar(dialog) {}

fun android.app.Fragment.immersionBar(dialog: Dialog) = immersionBar(dialog) {}

// dialog销毁
fun Activity.destroyImmersionBar(dialog: Dialog) = ImmersionBar.destroy(this, dialog)

fun androidx.fragment.app.Fragment.destroyImmersionBar(dialog: Dialog) = activity?.run { ImmersionBar.destroy(this, dialog) }
fun Fragment.destroyImmersionBar(dialog: Dialog) = activity?.run { ImmersionBar.destroy(this, dialog) }
?: Unit

fun android.app.Fragment.destroyImmersionBar(dialog: Dialog) = activity?.run { ImmersionBar.destroy(this, dialog) }
?: Unit

// Fragment销毁
@JvmOverloads
fun Fragment.destroyImmersionBar(isOnly: Boolean = false) = ImmersionBar.destroy(this, isOnly)

// 状态栏扩展
val Activity.statusBarHeight get() = ImmersionBar.getStatusBarHeight(this)

val androidx.fragment.app.Fragment.statusBarHeight get() = ImmersionBar.getStatusBarHeight(this)
val Fragment.statusBarHeight get() = ImmersionBar.getStatusBarHeight(this)

val android.app.Fragment.statusBarHeight get() = ImmersionBar.getStatusBarHeight(this)

// 导航栏扩展
val Activity.navigationBarHeight get() = ImmersionBar.getNavigationBarHeight(this)

val androidx.fragment.app.Fragment.navigationBarHeight get() = ImmersionBar.getNavigationBarHeight(this)
val Fragment.navigationBarHeight get() = ImmersionBar.getNavigationBarHeight(this)

val android.app.Fragment.navigationBarHeight get() = ImmersionBar.getNavigationBarHeight(this)

val Activity.navigationBarWidth get() = ImmersionBar.getNavigationBarWidth(this)

val androidx.fragment.app.Fragment.navigationBarWidth get() = ImmersionBar.getNavigationBarWidth(this)
val Fragment.navigationBarWidth get() = ImmersionBar.getNavigationBarWidth(this)

val android.app.Fragment.navigationBarWidth get() = ImmersionBar.getNavigationBarWidth(this)

// ActionBar扩展
val Activity.actionBarHeight get() = ImmersionBar.getActionBarHeight(this)

val androidx.fragment.app.Fragment.actionBarHeight get() = ImmersionBar.getActionBarHeight(this)
val Fragment.actionBarHeight get() = ImmersionBar.getActionBarHeight(this)

val android.app.Fragment.actionBarHeight get() = ImmersionBar.getActionBarHeight(this)

// 是否有导航栏
val Activity.hasNavigationBar get() = ImmersionBar.hasNavigationBar(this)

val androidx.fragment.app.Fragment.hasNavigationBar get() = ImmersionBar.hasNavigationBar(this)
val Fragment.hasNavigationBar get() = ImmersionBar.hasNavigationBar(this)

val android.app.Fragment.hasNavigationBar get() = ImmersionBar.hasNavigationBar(this)

// 是否有刘海屏
val Activity.hasNotchScreen get() = ImmersionBar.hasNotchScreen(this)

val androidx.fragment.app.Fragment.hasNotchScreen get() = ImmersionBar.hasNotchScreen(this)
val Fragment.hasNotchScreen get() = ImmersionBar.hasNotchScreen(this)

val android.app.Fragment.hasNotchScreen get() = ImmersionBar.hasNotchScreen(this)

Expand All @@ -106,7 +110,7 @@ val View.hasNotchScreen get() = ImmersionBar.hasNotchScreen(this)
// 获得刘海屏高度
val Activity.notchHeight get() = ImmersionBar.getNotchHeight(this)

val androidx.fragment.app.Fragment.notchHeight get() = ImmersionBar.getNotchHeight(this)
val Fragment.notchHeight get() = ImmersionBar.getNotchHeight(this)

val android.app.Fragment.notchHeight get() = ImmersionBar.getNotchHeight(this)

Expand All @@ -121,50 +125,50 @@ val View.checkFitsSystemWindows get() = ImmersionBar.checkFitsSystemWindows(this

// 导航栏是否在底部
val Activity.isNavigationAtBottom get() = ImmersionBar.isNavigationAtBottom(this)
val androidx.fragment.app.Fragment.isNavigationAtBottom get() = ImmersionBar.isNavigationAtBottom(this)
val Fragment.isNavigationAtBottom get() = ImmersionBar.isNavigationAtBottom(this)

val android.app.Fragment.isNavigationAtBottom get() = ImmersionBar.isNavigationAtBottom(this)

// statusBarView扩展
fun Activity.fitsStatusBarView(view: View) = ImmersionBar.setStatusBarView(this, view)

fun androidx.fragment.app.Fragment.fitsStatusBarView(view: View) = ImmersionBar.setStatusBarView(this, view)
fun Fragment.fitsStatusBarView(view: View) = ImmersionBar.setStatusBarView(this, view)

fun android.app.Fragment.fitsStatusBarView(view: View) = ImmersionBar.setStatusBarView(this, view)

// titleBar扩展
fun Activity.fitsTitleBar(vararg view: View) = ImmersionBar.setTitleBar(this, *view)

fun androidx.fragment.app.Fragment.fitsTitleBar(vararg view: View) = ImmersionBar.setTitleBar(this, *view)
fun Fragment.fitsTitleBar(vararg view: View) = ImmersionBar.setTitleBar(this, *view)

fun android.app.Fragment.fitsTitleBar(vararg view: View) = ImmersionBar.setTitleBar(this, *view)

fun Activity.fitsTitleBarMarginTop(vararg view: View) = ImmersionBar.setTitleBarMarginTop(this, *view)

fun androidx.fragment.app.Fragment.fitsTitleBarMarginTop(vararg view: View) = ImmersionBar.setTitleBarMarginTop(this, *view)
fun Fragment.fitsTitleBarMarginTop(vararg view: View) = ImmersionBar.setTitleBarMarginTop(this, *view)

fun android.app.Fragment.fitsTitleBarMarginTop(vararg view: View) = ImmersionBar.setTitleBarMarginTop(this, *view)

// 隐藏状态栏
fun Activity.hideStatusBar() = ImmersionBar.hideStatusBar(window)

fun androidx.fragment.app.Fragment.hideStatusBar() = activity?.run { ImmersionBar.hideStatusBar(window) } ?: Unit
fun Fragment.hideStatusBar() = activity?.run { ImmersionBar.hideStatusBar(window) } ?: Unit

fun android.app.Fragment.hideStatusBar() = activity?.run { ImmersionBar.hideStatusBar(window) }
?: Unit

// 显示状态栏
fun Activity.showStatusBar() = ImmersionBar.showStatusBar(window)

fun androidx.fragment.app.Fragment.showStatusBar() = activity?.run { ImmersionBar.showStatusBar(window) } ?: Unit
fun Fragment.showStatusBar() = activity?.run { ImmersionBar.showStatusBar(window) } ?: Unit

fun android.app.Fragment.showStatusBar() = activity?.run { ImmersionBar.showStatusBar(window) }
?: Unit

// 解决顶部与布局重叠问题,不可逆
fun Activity.setFitsSystemWindows() = ImmersionBar.setFitsSystemWindows(this)

fun androidx.fragment.app.Fragment.setFitsSystemWindows() = ImmersionBar.setFitsSystemWindows(this)
fun Fragment.setFitsSystemWindows() = ImmersionBar.setFitsSystemWindows(this)

fun android.app.Fragment.setFitsSystemWindows() = ImmersionBar.setFitsSystemWindows(this)

Expand Down
16 changes: 7 additions & 9 deletions immersionbar/src/main/java/com/gyf/immersionbar/BarConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,13 @@
import android.view.View;
import android.view.WindowManager;

import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_MODE_DEFAULT;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_MODE_EMUI;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_MODE_MIUI;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_HEIGHT;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_HEIGHT_LANDSCAPE;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_MODE_EMUI;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_MODE_MIUI;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_MODE_VIVO;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_WIDTH;
import static com.gyf.immersionbar.Constants.IMMERSION_STATUS_BAR_HEIGHT;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_MODE_VIVO;

/**
* The type Bar config.
Expand Down Expand Up @@ -121,10 +120,6 @@ private boolean hasNavBar(Activity activity) {
if (Settings.Secure.getInt(resolver, IMMERSION_NAVIGATION_BAR_MODE_VIVO, 0) != 0) {
return false;
}
//android 10以上机型
if (Settings.Secure.getInt(resolver, IMMERSION_NAVIGATION_BAR_MODE_DEFAULT, 0) == 2) {
return false;
}
}
//其他手机根据屏幕真实高度与显示高度是否相同来判断
WindowManager windowManager = activity.getWindowManager();
Expand Down Expand Up @@ -155,7 +150,10 @@ private int getInternalDimensionSize(Context context, String key) {
int sizeOne = context.getResources().getDimensionPixelSize(resourceId);
int sizeTwo = Resources.getSystem().getDimensionPixelSize(resourceId);

if (sizeTwo >= sizeOne) {
boolean b = !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !key.equals(IMMERSION_STATUS_BAR_HEIGHT));

if (sizeTwo >= sizeOne && !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
!key.equals(IMMERSION_STATUS_BAR_HEIGHT))) {
return sizeTwo;
} else {
float densityOne = context.getResources().getDisplayMetrics().density;
Expand Down
33 changes: 18 additions & 15 deletions immersionbar/src/main/java/com/gyf/immersionbar/ImmersionBar.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Build;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;

import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
Expand All @@ -14,18 +20,11 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.ColorUtils;
import androidx.drawerlayout.widget.DrawerLayout;

import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;

import java.util.HashMap;
import java.util.Map;
Expand All @@ -37,10 +36,10 @@
import static com.gyf.immersionbar.Constants.FLAG_FITS_TITLE;
import static com.gyf.immersionbar.Constants.FLAG_FITS_TITLE_MARGIN_TOP;
import static com.gyf.immersionbar.Constants.IMMERSION_BOUNDARY_COLOR;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_VIEW_ID;
import static com.gyf.immersionbar.Constants.IMMERSION_STATUS_BAR_VIEW_ID;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_DARK_MIUI;
import static com.gyf.immersionbar.Constants.IMMERSION_NAVIGATION_BAR_VIEW_ID;
import static com.gyf.immersionbar.Constants.IMMERSION_STATUS_BAR_DARK_MIUI;
import static com.gyf.immersionbar.Constants.IMMERSION_STATUS_BAR_VIEW_ID;

/**
* android 4.4以上沉浸式以及bar的管理
Expand Down Expand Up @@ -517,12 +516,16 @@ private void setupNavBarView() {
* 调整深色亮色模式参数
*/
private void adjustDarkModeParams() {
if (mBarParams.autoStatusBarDarkModeEnable && mBarParams.statusBarColor != Color.TRANSPARENT) {
boolean statusBarDarkFont = mBarParams.statusBarColor > IMMERSION_BOUNDARY_COLOR;
int statusBarColor = ColorUtils.blendARGB(mBarParams.statusBarColor,
mBarParams.statusBarColorTransform, mBarParams.statusBarAlpha);
if (mBarParams.autoStatusBarDarkModeEnable && statusBarColor != Color.TRANSPARENT) {
boolean statusBarDarkFont = statusBarColor > IMMERSION_BOUNDARY_COLOR;
statusBarDarkFont(statusBarDarkFont, mBarParams.autoStatusBarDarkModeAlpha);
}
if (mBarParams.autoNavigationBarDarkModeEnable && mBarParams.navigationBarColor != Color.TRANSPARENT) {
boolean navigationBarDarkIcon = mBarParams.navigationBarColor > IMMERSION_BOUNDARY_COLOR;
int navigationBarColor = ColorUtils.blendARGB(mBarParams.navigationBarColor,
mBarParams.navigationBarColorTransform, mBarParams.navigationBarAlpha);
if (mBarParams.autoNavigationBarDarkModeEnable && navigationBarColor != Color.TRANSPARENT) {
boolean navigationBarDarkIcon = navigationBarColor > IMMERSION_BOUNDARY_COLOR;
navigationBarDarkIcon(navigationBarDarkIcon, mBarParams.autoNavigationBarDarkModeAlpha);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void onChange(boolean selfChange) {

for (OnNavigationBarListener onNavigationBarListener : mListeners) {
if (mIsDefault) {
onNavigationBarListener.onNavigationBarChange(show != 2);
onNavigationBarListener.onNavigationBarChange(show == 0);
} else {
onNavigationBarListener.onNavigationBarChange(show != 1);
}
Expand Down

0 comments on commit b13900a

Please sign in to comment.