首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在drawerLayout使用windowinsets之前拦截它

,是指在使用DrawerLayout布局时,通过拦截window insets来控制DrawerLayout的行为。

Window insets是指窗口的边界区域,包括状态栏、导航栏等。在Android中,可以通过WindowInsets类来获取和处理窗口边界区域的信息。

在使用DrawerLayout时,可以通过拦截window insets来实现一些特定的需求,例如控制DrawerLayout的显示和隐藏、调整DrawerLayout的布局等。

具体实现的步骤如下:

  1. 在Activity的onCreate方法中,通过findViewById方法获取DrawerLayout的实例。
  2. 通过ViewCompat.setOnApplyWindowInsetsListener方法为DrawerLayout设置一个WindowInsetsCompat.OnApplyWindowInsetsListener监听器。
  3. 在监听器的onApplyWindowInsets方法中,可以对WindowInsets进行处理,例如获取状态栏的高度、判断是否有导航栏等。
  4. 根据需求,可以通过修改DrawerLayout的布局参数来调整DrawerLayout的位置和大小,或者通过设置DrawerLayout的可见性来控制其显示和隐藏。

以下是一个示例代码:

代码语言:txt
复制
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
ViewCompat.setOnApplyWindowInsetsListener(drawerLayout, new ViewCompat.OnApplyWindowInsetsListener() {
    @Override
    public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
        // 处理WindowInsets,例如获取状态栏的高度
        int statusBarHeight = insets.getSystemWindowInsetTop();
        
        // 根据需求调整DrawerLayout的布局参数
        DrawerLayout.LayoutParams layoutParams = (DrawerLayout.LayoutParams) v.getLayoutParams();
        layoutParams.topMargin = statusBarHeight;
        v.setLayoutParams(layoutParams);
        
        // 返回处理后的WindowInsets
        return insets.consumeSystemWindowInsets();
    }
});

在上述示例中,我们通过获取状态栏的高度,并将其应用到DrawerLayout的布局参数中,从而实现了在使用window insets之前拦截DrawerLayout的效果。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),该产品提供了移动应用数据分析的能力,可以帮助开发者深入了解用户行为、优化产品体验。产品介绍链接地址:https://cloud.tencent.com/product/mta

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用Java 8并行流之前要考虑两次

使用Java 8并行流之前要考虑两次 如果您倾听来自Oracle的人们谈论Java 8背后的设计选择,您会经常听到并行性是主要动机。 并行化是lambdas,流API和其他方面的驱动力。...问题是所有并行流都使用common fork-join thread pool,如果 你提交一个长期运行的任务,你有效地阻止了池中的所有线程。因此,您将阻止使用并行流的所有其他任务。...ForkJoinPool 的适用场景: ForkJoinPool 不是为了替代 ExecutorService,而是的补充,某些应用场景下性能比 ExecutorService 更好。...所有这些都在执行CPU密集型任务,第一个被“打破”并且找到素数后就睡了一秒钟。 这只是一个人为的例子; 你可以想象一个被卡住或执行阻塞操作的线程。 问题是:当我们执行这段代码时会发生什么?...但这说起来容易做起来难,尤其是复杂的应用程序中。另一个选项是不使用并行流,直到Oracle允许我们指定用于并行流的线程池。

92140
  • 如何更好的 react 中使用 axios 的拦截

    之前 react 中处理 axios 的封装一直没有找到很好的方式,因为 axios 是非常独立,并且提供的各种 api 都是一次性配置,例如 axios.create、axios.defaults...但是 react 中,axios 并不是完全作为第三方工具,拦截器应该被定义为服务,即 react 中的副作用代码。...如何使用 举个两个最经典的例子: axios 拦截器中消费上下文,使用 useContext axios 中使用第三方路由 React Router 消费上下文 react 中,...拦截器中使用路由 axios 的拦截器中使用路由也是非常麻烦的事情,也有一些 “歪门邪道” 的路由处理方式,我曾经也是这样的,甚至我会粗暴的来一个: window.location.href =...总而言之,之前 axios 的拦截器中使用路由一直不是件光彩事。

    2.5K30

    如何处理手势冲突 | 手势导航连载 (三)

    不幸的是, 进度条太靠近主屏手势区域 (Home Screen Gesture Area),所以当用户该区域滑动时,系统把错误地判断为用户是要执行快速切换应用的操作,这也会让用户感到困惑。...有很多可能导致冲突的例子,例如: 导航抽屉 (DrawerLayout)、多图展示 (ViewPager)、进度条 (SeekBar),甚至列表上进行滑动操作也有可能出现冲突。...这对于屏幕底部附近的视图尤其重要,因为该区域是系统强制手势交互区域,并且应用无法该区域使用热区切出 API。 这里让我们回到之前提到的音乐播放器示例。...包含一个位于屏幕底部的进度条,允许用户快进和快退歌曲。...衍生阅读: 如何让 WindowInsets 更易于使用: medium.com/androiddeve… 更优的解法 在做完上一步后,您可能会觉得问题已经解决了。

    4.9K30

    【科研利器】服务器上也能使用jupyter?学

    最近身边有很多朋友已经开始逐渐上手科研了,但对于习惯Jupyter上写code的人来说,可能会存在这样一个问题:我怎么才能在服务器上使用jupyter呢?如果你也有这样的问题,那么请接着往下看!...conda install jupyter 完成安装之后,要想在服务器上使用jupyter,可以通过以下方法实现: Step1:通过screen命令打开一个新的作业,这样可以避免由于服务器连接中断导致...以上就是服务器上使用jupyter的操作方法了。如果大家step6发现密码错误,又或者你觉得账户密码太长了想重新设置密码,可以通过以下的操作实现。...c.NotebookApp.ip = '*' # 允许访问此服务器的 IP,星号表示任意 IP c.NotebookApp.password = u'sha1:xxx:xxx' # 改为之前生成的密码...如果大家操作过程中有任何问题的话,欢迎添加小编微信(公众号“邀您进群”菜单栏)请求帮助哈!也欢迎大家邀请身边的朋友、同学加入我们的讨论群,共同学习进步!

    3.1K20

    实现边到边的体验 | 让您的软键盘动起来 (一)

    Android 系统中,边衬区可以通过 WindowInsets 类和 AndroidX 中的 WindowInsetsCompat 来访问。...我们刚刚多次提到 "类型",它们 WindowInsets.Type 类中被定义为函数,每个函数都会返回一个整数标示。我们稍后还会展示如何使用 OR 位运算来查询结合到一起的类型。...WindowInsetsController 之前我们提到过,有一些 View.SYSTEM_UI_* 标志已经 Android 11 中被弃用,并且被新的 API 代替。...WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE ) // 当我们想要隐藏系统栏 controller.hide(Type.systemBars()) 类似地,如果您之前使用吸附式的...您会看到如下两个应用: 两个应用,左边的使用的是深色状态栏背景,右边的使用的是浅色背景 左边的应用使用的是一个深色的状态栏背景,而的内容用的是浅色,比如时间和图标。

    32020

    Neuron:如果这是很多人帕金森病的开始,我们可能能够进入大脑之前识别谁患有这种疾病,并希望能够阻止

    Sulzer表示:“如果这是很多人帕金森病的开始,我们可能能够进入大脑之前识别谁患有这种疾病,并希望能够阻止。”...自身免疫与肠道 帕金森病的源于肠道的理论最早是20年前提出的,Sulzer进行自己的研究后逐渐对自身免疫反应在帕金森病中的作用产生兴趣。...肠道是一个有趣的可能性,因为包含相同的神经元,并且大多数帕金森病患者脑部症状出现和疾病被诊断之前的前几年就会经历便秘。...α-syn特异性T细胞PD发病机制中的作用。...研究人员没有大脑中看到任何类似帕金森病的迹象,但他们发现,对肠道神经元的免疫攻击会导致便秘和其他类似大多数帕金森病患者在被诊断出病情之前多年出现的肠道症状。

    15320

    实现边到边的体验 | 让您的软键盘动起来 (一)

    #2: 设置全屏布局 以往的第二步中,应用需要使用 systemUiVisibility API 以及一些参数来设置全屏布局: view.systemUiVisibility = // 通知系统... Android 系统中,边衬区可以通过 WindowInsets 类和 AndroidX 中的 WindowInsetsCompat 来访问。...为了使用 WindowInsets,您通常需要在一个视图上添加 OnApplyWindowInsetsListener,并且在这个函数中处理传进来的边衬区: ViewCompat.setOnApplyWindowInsetsListener...我们刚刚多次提到 "类型",它们 WindowInsets.Type 类中被定义为函数,每个函数都会返回一个整数标示。我们稍后还会展示如何使用 OR 位运算来查询结合到一起的类型。...再来看如果我们用新的 API 来更新之前的示例,它们就变成: ViewCompat.setOnApplyWindowInsetsListener(...) { view, insets -> -

    1.4K20

    1. Jetpack源码解析---看完你就知道Navigation是什么了?

    背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...2.1.1 DrawerLayout 侧边栏的用法和我们之前使用一样,配置好我们NavigationView里面的_headerLayout_、_menu_即可; **注意:**这里面的menu有一点和我们之前的不一样...2.1.2 ToolBar和NavHostFragment DrawerLayout配置好之后,我们再来配置标题栏,之前我们的用法都是中间加一个存放Fragment的容器,有可能是FrameLayout...查看的方法实现: ? 我们看到重载了很多方法,包括我们上面提到的NavigationView、ToolBar、BottomNavigationView、DrawerLayout

    2.5K30

    全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现

    这里牵扯到WindowInsets的消费,其实就是我们周围一些系统的边框padding的消耗,分成不同的消耗层级: DecorView层级的消费 :主要针对NavigationBar部分 DecorView...DecorView级别的WindowInsets消费 默认样式Activity的状态栏是有颜色的,如果内容直接扩展到状态栏下方,一定会被覆盖掉,系统默认的实现是DecorView的根布局上加了个padding...看下ViewRootImpl的源码,ViewRootImpl进行布局与绘制的时候会选择性调用dispatchApplyInsets,这个函数的作用是找到符合要求的View,消费掉WindowInsets...Android4.4的时候,加了个windowTranslucentStatus属性,实现了状态栏导航栏半透明效果,而Android5.0之后以上状态栏、导航栏支持颜色随意设定,所以,5.0之后一般不使用需要使用该属性...不过并不影响fitSystemWindow的逻辑。

    5.5K40

    1. Android_Jetpack组件---Naviagtion源码解析

    背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...2.1.1 DrawerLayout 侧边栏的用法和我们之前使用一样,配置好我们NavigationView里面的_headerLayout_、_menu_即可; **注意:**这里面的menu有一点和我们之前的不一样...2.1.2 ToolBar和NavHostFragment DrawerLayout配置好之后,我们再来配置标题栏,之前我们的用法都是中间加一个存放Fragment的容器,有可能是FrameLayout...查看的方法实现: ? 我们看到重载了很多方法,包括我们上面提到的NavigationView、ToolBar、BottomNavigationView、DrawerLayout

    2.1K10

    陪伴了你N年的控件等你来看—DrawerLayout

    之前的应用中,实现侧滑菜单功能大多是通过开源库SlidingMenu来实现,后来谷歌V4包中添加了 DrawerLayout来实现这个功能,完全可以替代 SlidingMenu。...1.基本使用 对于 DrawerLayout来说,从的名字就可以看出来它是一个布局,继承自 ViewGroup,布局中允许放入两个直接子控件,第一个子控件为主屏幕中显示的内容,第二个子控件是侧滑菜单中显示的内容...上图代码中,最外层控件使用DrawerLayout,其包裹了两个子控件,我们可以根据实际项目需求修改成自己的布局样式,自行定义。...2.代码控制及监听 上述示例中,只有屏幕左边缘处进行拖拽,才可显示侧滑菜单,有时用户并不知道有此功能,这就需要我们通过按钮的点击操作,控制 DrawerLayout的显示或隐藏。...DrawerLayout的全部内容, DrawerLayout还有很多有意思的扩展功能,让我们根据自己的项目进行配置,赶快项目中使用吧!

    59030

    再学一遍android:fitsSystemWindows属性

    熟悉是因为大概知道它可以用来实现沉浸式状态栏的效果,陌生是因为对好像又不够了解,这个属性经常时灵时不灵的。...而最近因为工作的原因,我又碰上了android:fitsSystemWindows这个属性,并且我之前的那些知识储备已经不够用了。...Google提供的诸多布局当中,并不是只有CoordinatorLayout会处理android:fitsSystemWindows属性,像CollapsingToolbarLayout、DrawerLayout...重新运行一下程序,效果如下图所示: 需要注意的是,CollapsingToolbarLayout一定要结合着CoordinatorLayout一起使用,而不能单独使用。...出现这个问题的原因也很好理解,因为之前我们是使用的CoordinatorLayout嘛,已经帮我们考虑好到这些事情,自动会将内部的控件进行偏移。

    1.2K50

    你见过微信侧滑返回的联动效果,但开门效果、百叶窗效果见过吗?

    ViewDragHelper的主要作用是:拦截父容器的touch事件,捕获一个子控件来进行拖拽,通过改变这个子控件的left和top来将其父容器中重新定位,从而达到拖拽的效果。...官方支持库中,滑动抽屉相关的SlidingPaneLayout和DrawerLayout,以及CoordinatorLayout布局相关的BottomSheetBehavior和SwipeDismissBehavior...既然侧滑手势能被明确地抽象出来,那么我们是否可以借鉴ViewDragHelper的事件拦截思路将它做这样的封装?...)使用不同的策略不断消费侧滑的位移来进行侧滑效果的UI呈现。...使用方式同样简单: SmartSwipe.wrap(view) //指定目标控件 .addConsumer(new StretchConsumer()) //添加弹性拉伸效果 .enableVertical

    1.5K10

    1. Jetpack源码解析---看完你就知道Navigation是什么了?

    背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...2.1.1 DrawerLayout 侧边栏的用法和我们之前使用一样,配置好我们NavigationView里面的_headerLayout_、_menu_即可; **注意:**这里面的menu有一点和我们之前的不一样...2.1.2 ToolBar和NavHostFragment DrawerLayout配置好之后,我们再来配置标题栏,之前我们的用法都是中间加一个存放Fragment的容器,有可能是FrameLayout...查看的方法实现: 我们看到重载了很多方法,包括我们上面提到的NavigationView、ToolBar、BottomNavigationView、DrawerLayout

    2.2K20
    领券