ImmersionBar使用教程:Android沉浸式状态栏和导航栏管理

ImmersionBar使用教程:Android沉浸式状态栏和导航栏管理

【免费下载链接】ImmersionBar android 4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换、刘海屏、软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色,以及不可修改字体颜色手机的适配,适用于Activity、Fragment、DialogFragment、Dialog,PopupWindow,一句代码轻松实现,以及对bar的其他设置,详见README。简书请参考:http://www.jianshu.com/p/2a884e211a62 【免费下载链接】ImmersionBar 项目地址: https://gitcode.com/gh_mirrors/im/ImmersionBar

ImmersionBar是一个强大的Android库,专门用于简化Android 4.4及以上版本的状态栏和导航栏沉浸式设计。它支持横竖屏切换、刘海屏适配、软键盘弹出等复杂场景,并允许开发者灵活定制状态栏和导航栏的颜色、透明度等样式。

项目介绍

ImmersionBar由gyf-dev开发,是一个高度兼容的沉浸式状态栏解决方案。该库支持Activity、Fragment、DialogFragment、Dialog、PopupWindow等多种组件,只需一句代码即可实现沉浸式效果。

快速开始

添加依赖

在项目的build.gradle文件中添加依赖:

dependencies {
    implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
    // kotlin扩展(可选)
    implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.2'
}

基础使用

在Activity中初始化ImmersionBar:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    ImmersionBar.with(this)
            .transparentStatusBar()
            .init();
}

销毁资源

在Activity销毁时释放资源:

@Override
protected void onDestroy() {
    super.onDestroy();
    ImmersionBar.destroy(this);
}

核心功能详解

状态栏和导航栏颜色设置

ImmersionBar.with(this)
        .statusBarColor(R.color.colorPrimary)     // 状态栏颜色
        .navigationBarColor(R.color.colorPrimary)  // 导航栏颜色
        .statusBarAlpha(0.3f)                     // 状态栏透明度
        .navigationBarAlpha(0.4f)                 // 导航栏透明度
        .init();

深色模式适配

ImmersionBar.with(this)
        .statusBarDarkFont(true)                  // 状态栏深色字体
        .navigationBarDarkIcon(true)              // 导航栏深色图标
        .autoDarkModeEnable(true)                 // 自动深色模式
        .init();

全屏模式

ImmersionBar.with(this)
        .fullScreen(true)                         // 全屏显示
        .navigationBarColor(Color.TRANSPARENT)    // 透明导航栏
        .init();

适配解决方案

刘海屏适配

在AndroidManifest.xml中添加配置:

<!-- 适配华为刘海屏 -->
<meta-data 
    android:name="android.notch_support" 
    android:value="true"/>
    
<!-- 适配小米刘海屏 -->
<meta-data
    android:name="notch.config"
    android:value="portrait|landscape" />

布局重叠解决方案

方案1:使用fitsSystemWindows属性

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
</LinearLayout>

方案2:使用statusBarView方法

ImmersionBar.with(this)
        .statusBarView(view)  // 指定状态栏占位View
        .init();

软键盘冲突解决

ImmersionBar.with(this)
        .keyboardEnable(true)  // 启用键盘适配
        .init();

Fragment中的使用

基础Fragment实现

public class MyFragment extends Fragment {
    
    @Override
    public void onResume() {
        super.onResume();
        ImmersionBar.with(this).init();
    }
}

ViewPager中的Fragment

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        ImmersionBar.with(Activity.this).init();
    }
});

Dialog和PopupWindow中的使用

DialogFragment中的沉浸式

public class MyDialogFragment extends DialogFragment {
    
    @Override
    public void onResume() {
        super.onResume();
        ImmersionBar.with(this).init();
    }
}

PopupWindow中的沉浸式

popupWindow.setClippingEnabled(false);
ImmersionBar.with(activity, popupWindow).init();

实用工具方法

ImmersionBar提供了丰富的工具方法:

// 判断是否存在导航栏
boolean hasNav = ImmersionBar.hasNavigationBar(activity);

// 获取状态栏高度
int statusBarHeight = ImmersionBar.getStatusBarHeight(activity);

// 获取导航栏高度
int navBarHeight = ImmersionBar.getNavigationBarHeight(activity);

// 判断是否为刘海屏
boolean isNotch = ImmersionBar.hasNotchScreen(activity);

横竖屏切换处理

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    ImmersionBar.with(this).init();
}

最佳实践建议

  1. 在BaseActivity中统一管理
public class BaseActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ImmersionBar.with(this).init();
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ImmersionBar.destroy(this);
    }
}
  1. 不同页面使用不同配置
// 首页使用透明状态栏
ImmersionBar.with(this)
        .transparentStatusBar()
        .init();

// 详情页使用特定颜色
ImmersionBar.with(this)
        .statusBarColor(R.color.primaryDark)
        .statusBarDarkFont(true)
        .init();
  1. 注意内存泄漏问题 确保在Dialog、PopupWindow等组件销毁时调用对应的destroy方法。

常见问题解决

白色状态栏字体适配

对于不支持状态栏字体变色的设备:

ImmersionBar.with(this)
        .statusBarDarkFont(true, 0.2f)  // 添加透明度适配
        .init();

底部输入框被遮挡

ImmersionBar.with(this)
        .keyboardEnable(true)
        .keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
        .init();

ImmersionBar提供了全面而灵活的沉浸式状态栏解决方案,通过简单的API调用即可实现复杂的适配需求,大大提升了Android应用的视觉体验和开发效率。

【免费下载链接】ImmersionBar android 4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换、刘海屏、软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色,以及不可修改字体颜色手机的适配,适用于Activity、Fragment、DialogFragment、Dialog,PopupWindow,一句代码轻松实现,以及对bar的其他设置,详见README。简书请参考:http://www.jianshu.com/p/2a884e211a62 【免费下载链接】ImmersionBar 项目地址: https://gitcode.com/gh_mirrors/im/ImmersionBar

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值