Skip to content

Commit

Permalink
update 3.0.0-beta05,fix #333 and optimize
Browse files Browse the repository at this point in the history
  • Loading branch information
geyifeng committed May 31, 2019
1 parent ac3236f commit 47c6538
Show file tree
Hide file tree
Showing 20 changed files with 184 additions and 78 deletions.
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
![logo](https://github.com/gyf-dev/Screenshots/blob/master/ImmersionBar/readme_head.png)
# ImmersionBar -- android 4.4以上沉浸式实现
[![version](https://img.shields.io/badge/version-3.0.0--beta04-brightgreen.svg)](https://bintray.com/geyifeng/maven/immersionbar) [![author](https://img.shields.io/badge/author-gyf--dev-orange.svg)](https://github.com/gyf-dev) [![简书](https://img.shields.io/badge/%E7%AE%80%E4%B9%A6-HeLe%E5%B0%8F%E5%AD%90%E6%8B%BD-blue.svg)](https://www.jianshu.com/p/2a884e211a62) [![QQ群](https://img.shields.io/badge/QQ%E7%BE%A4-314360549-red.svg)]()
[![version](https://img.shields.io/badge/version-3.0.0--beta05-brightgreen.svg)](https://bintray.com/geyifeng/maven/immersionbar) [![author](https://img.shields.io/badge/author-gyf--dev-orange.svg)](https://github.com/gyf-dev) [![简书](https://img.shields.io/badge/%E7%AE%80%E4%B9%A6-HeLe%E5%B0%8F%E5%AD%90%E6%8B%BD-blue.svg)](https://www.jianshu.com/p/2a884e211a62) [![QQ群](https://img.shields.io/badge/QQ%E7%BE%A4-314360549-red.svg)]()

## 直接看效果图,最下面有各个版本的效果图
## 直接看效果图,建议下载demo体验,最下面有各个版本的效果图
<img width="300" src="https://github.com/gyf-dev/Screenshots/blob/master/ImmersionBar/Screenshot_6.0.gif"/>

## 使用
> android studio
```groovy
// 基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0-beta04'
implementation 'com.gyf.immersionbar:immersionbar:3.0.0-beta05'
// fragment快速实现(可选)
implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0-beta04'
implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0-beta05'
// kotlin扩展(可选)
implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0-beta04'
implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0-beta05'
```
## 2.x版本使用说明
#### [点我查看2.x版本使用说明](https://github.com/gyf-dev/ImmersionBar/blob/master/README_2.x.md)
Expand All @@ -22,7 +22,7 @@
#### [点我查看版本说明](https://github.com/gyf-dev/ImmersionBar/wiki)

## 下载demo
#### [点我下载immersionBar-3.0.0beta04.apk](https://github.com/gyf-dev/ImmersionBar/blob/master/apk/immersionBar-3.0.0beta04.apk)
#### [点我下载immersionBar-3.0.0beta05.apk](https://github.com/gyf-dev/ImmersionBar/blob/master/apk/immersionBar-3.0.0beta05.apk)

## 关于使用AndroidX支持库
- 如果你的项目中使用了AndroidX支持库,请在你的gradle.properties加入如下配置,如果已经配置了,请忽略
Expand Down Expand Up @@ -224,7 +224,7 @@
</LinearLayout>
```

- ② 使用系统的fitsSystemWindows属性,使用该属性不会导致输入框与软键盘冲突问题,不要再Fragment使用该属性
- ② 使用系统的fitsSystemWindows属性,使用该属性不会导致输入框与软键盘冲突问题,不要再Fragment使用该属性,只适合纯色状态栏

```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
Expand All @@ -242,15 +242,15 @@
```
- 注意:ImmersionBar一定要在设置完布局以后使用,

- ③ 使用ImmersionBar的fitsSystemWindows(boolean fits)方法
- ③ 使用ImmersionBar的fitsSystemWindows(boolean fits)方法,只适合纯色状态栏

```java
ImmersionBar.with(this)
.fitsSystemWindows(true) //使用该属性,必须指定状态栏颜色
.statusBarColor(R.color.colorPrimary)
.init();
```
- ④ 使用ImmersionBar的statusBarView(View view)方法
- ④ 使用ImmersionBar的statusBarView(View view)方法,可以用来适配渐变色状态栏、侧滑返回

在标题栏的上方增加View标签,高度指定为0dp
```xml
Expand Down Expand Up @@ -283,15 +283,15 @@
//或者
//ImmersionBar.setStatusBarView(this,view);
```
- ⑤ 使用ImmersionBar的titleBar(View view)方法,原理是设置paddingTop
- ⑤ 使用ImmersionBar的titleBar(View view)方法,原理是设置paddingTop,可以用来适配渐变色状态栏、侧滑返回
```java
ImmersionBar.with(this)
.titleBar(view) //可以为任意view,如果是自定义xml实现标题栏的话,标题栏根节点不能为RelativeLayout或者ConstraintLayout,以及其子类
.init();
//或者
//ImmersionBar.setTitleBar(this, view);
```
- ⑥ 使用ImmersionBar的titleBarMarginTop(View view)方法,原理是设置marginTop
- ⑥ 使用ImmersionBar的titleBarMarginTop(View view)方法,原理是设置marginTop,只适合纯色状态栏
```java
ImmersionBar.with(this)
.titleBarMarginTop(view) //可以为任意view
Expand Down
Binary file not shown.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

buildscript {
ext.kotlin_version = '1.3.31'
ext.immersionbar_version = '3.0.0-beta04'
ext.immersionbar_version = '3.0.0-beta05'
repositories {
google()
jcenter()
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#Mon May 27 16:27:12 CST 2019
#Fri May 31 16:27:24 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public void hideSoftKeyBoard(Activity activity) {
View localView = activity.getCurrentFocus();
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (localView != null && imm != null) {
imm.hideSoftInputFromWindow(localView.getWindowToken(), 2);
imm.hideSoftInputFromWindow(localView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;

import com.gyf.immersionbar.simple.service.NetworkService;
import com.tencent.bugly.crashreport.CrashReport;
Expand All @@ -16,6 +17,12 @@ public class MyApp extends Application {
@SuppressLint("StaticFieldLeak")
private static Context mContext;

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

@Override
public void onCreate() {
super.onCreate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ open class BaseKotlinActivity(@LayoutRes val layoutResID: Int) : AppCompatActivi
super.onCreate(savedInstanceState)
AppManager.getInstance().addActivity(this)
setContentView(layoutResID)
if (isImmersionBarEnabled()) {
initImmersionBar()
}
initImmersionBar()
//初始化数据
initData()
//view与数据绑定
Expand All @@ -32,8 +30,6 @@ open class BaseKotlinActivity(@LayoutRes val layoutResID: Int) : AppCompatActivi
AppManager.getInstance().removeActivity(this)
}

open fun isImmersionBarEnabled() = true

open fun initImmersionBar() {
immersionBar()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,27 +42,32 @@ protected void onHandleWork(@NonNull Intent intent) {

private void registerNetwork(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
getNetworkEvent().setAvailable(true);
EventBus.getDefault().post(mNetworkEvent);
}
if (connectivityManager != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
getNetworkEvent().setAvailable(true);
EventBus.getDefault().post(mNetworkEvent);
}

@Override
public void onLost(Network network) {
super.onLost(network);
getNetworkEvent().setAvailable(false);
EventBus.getDefault().post(mNetworkEvent);
}
});
@Override
public void onLost(Network network) {
super.onLost(network);
getNetworkEvent().setAvailable(false);
EventBus.getDefault().post(mNetworkEvent);
}
});
} else {
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
mReceiver = new NetworkBroadCastReceiver();
LocalBroadcastManager.getInstance(context).registerReceiver(mReceiver, filter);
}
} else {
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
mReceiver = new NetworkBroadCastReceiver();
LocalBroadcastManager.getInstance(context).registerReceiver(mReceiver, filter);
getNetworkEvent().setAvailable(false);
EventBus.getDefault().post(mNetworkEvent);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
public class Utils {

public static Integer[] getWidthAndHeight(Window window) {
if (window == null) {
return null;
}
Integer[] integer = new Integer[2];
DisplayMetrics dm = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:imeOptions="flagNoExtractUi" />

<TextView
android:layout_width="wrap_content"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@


<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="我是输入框" />
Expand Down
3 changes: 2 additions & 1 deletion immersionbar-simple/src/main/res/layout/dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:imeOptions="flagNoExtractUi" />

<TextView
android:layout_width="wrap_content"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
package com.gyf.immersionbar.simple;

import com.apkfuns.logutils.LogUtils;
import com.gyf.immersionbar.simple.utils.Utils;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Random;

import static org.junit.Assert.*;

/**
* Example local unit test, which will execute on the development machine (host).
*
Expand All @@ -18,10 +10,6 @@
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
Random random = new Random();
for (int i = 0; i < 100; i++) {
System.out.println(random.nextInt(2));
}

}
}
18 changes: 13 additions & 5 deletions immersionbar/src/main/java/com/gyf/immersionbar/BarConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;

import static com.gyf.immersionbar.Constants.IMMERSION_EMUI_NAVIGATION_BAR_HIDE_SHOW;
Expand Down Expand Up @@ -53,12 +54,18 @@ class BarConfig {
}

@TargetApi(14)
private int getActionBarHeight(Context context) {
private int getActionBarHeight(Activity activity) {
int result = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
result = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
View actionBar = activity.getWindow().findViewById(R.id.action_bar_container);
if (actionBar != null) {
result = actionBar.getMeasuredHeight();
}
if (result == 0) {
TypedValue tv = new TypedValue();
activity.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
result = TypedValue.complexToDimensionPixelSize(tv.data, activity.getResources().getDisplayMetrics());
}
}
return result;
}
Expand Down Expand Up @@ -145,7 +152,8 @@ private int getInternalDimensionSize(Context context, String key) {
} else {
float densityOne = context.getResources().getDisplayMetrics().density;
float densityTwo = Resources.getSystem().getDisplayMetrics().density;
return Math.round(sizeOne * densityTwo / densityOne);
float f = sizeOne * densityTwo / densityOne;
return (int) ((f >= 0) ? (f + 0.5f) : (f - 0.5f));
}
}
} catch (Resources.NotFoundException ignored) {
Expand Down
12 changes: 12 additions & 0 deletions immersionbar/src/main/java/com/gyf/immersionbar/BarProperties.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ public class BarProperties {
* 刘海屏高度
*/
private int notchHeight;
/**
* ActionBar高度
*/
private int actionBarHeight;

public boolean isPortrait() {
return portrait;
Expand Down Expand Up @@ -116,4 +120,12 @@ public int getNotchHeight() {
void setNotchHeight(int notchHeight) {
this.notchHeight = notchHeight;
}

public int getActionBarHeight() {
return actionBarHeight;
}

void setActionBarHeight(int actionBarHeight) {
this.actionBarHeight = actionBarHeight;
}
}
20 changes: 18 additions & 2 deletions immersionbar/src/main/java/com/gyf/immersionbar/FitsKeyboard.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
*/
class FitsKeyboard implements ViewTreeObserver.OnGlobalLayoutListener {

private final int mStatusBarHeight;
private final int mActionBarHeight;
private int mStatusBarHeight;
private int mActionBarHeight;
private ImmersionBar mImmersionBar;
private Activity mActivity;
private Window mWindow;
Expand Down Expand Up @@ -63,6 +63,19 @@ void enable(int mode) {
}
}

/**
* 为啥要更新?因为横竖屏切换状态栏高度有可能不一样
* Update bar config.
*
* @param barConfig the bar config
*/
void updateBarConfig(BarConfig barConfig) {
mStatusBarHeight = barConfig.getStatusBarHeight();
if (mImmersionBar != null && mImmersionBar.isActionBarBelowLOLLIPOP()) {
mActionBarHeight = barConfig.getActionBarHeight();
}
}

void disable() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && mIsAddListener) {
if (mChildView != null) {
Expand Down Expand Up @@ -131,6 +144,9 @@ public void onGlobalLayout() {
if (mImmersionBar.getBarParams().onKeyboardListener != null) {
mImmersionBar.getBarParams().onKeyboardListener.onKeyboardChange(isPopup, keyboardHeight);
}
if (!isPopup && mImmersionBar.getBarParams().barHide != BarHide.FLAG_SHOW_BAR) {
mImmersionBar.setBar();
}
}
}
}
Expand Down
Loading

0 comments on commit 47c6538

Please sign in to comment.