> <android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/ > 就是两个Fragment构成主要布局,然后在Java代码中获取Fragment: SlidingPaneLayout spl = (SlidingPaneLayout) this.findViewById (R.id.slidingPanelLayout); spl.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() { (SlidingPaneLayout.java:343) at android.support.v4.widget.SlidingPaneLayout$DragHelperCallback.onViewDragStateChanged (SlidingPaneLayout.java:826) 在onPanelOpend()方法里面出现了空指针异常。
有用 SwipeBackLayout 开源库的,有用 SlidingPaneLayout 控件的,有通过使用 GestureDetector 手势识别的类的,也有写一个基类的,还有一些其他的实现方法。 SlidingPaneLayout 效果图: ? 这个基类 BaseActivity 是根据 SlidingPaneLayout 来构造的,当然也需要继承 AppCompatActivity,这是当我们直接继承该类时所必须的。 slidingPaneLayout = new SlidingPaneLayout(this); //通过反射改变mOverhangSize的值为0,这个mOverhangSize ); // 为 SlidingPaneLayout 添加内容视图 slidingPaneLayout.addView(decorChild, 1);
SlidingPaneLayout SlidingPaneLayout是Android在android-support-v4.jar中推出的一个可滑动面板的布局,在前面《Android开发笔记( 只要我们在布局文件的SlidingPaneLayout节点下定义两个子布局,那么页面默认会把第一个子布局作为左侧隐藏面板,一旦用户的手势从左向右滑动,左侧面板就被拉了出来。 SlidingPaneLayout的使用挺简单的,下面是它的几个常用方法: setSliderFadeColor : 设置主页面的阴影渐变色。 下面是使用SlidingPaneLayout的效果截图: ? 下面是使用SlidingPaneLayout的布局文件示例: <? 2、SlidingPaneLayout的侧滑面板在滑动时,主页面也跟着往右滑;而DrawerLayout的侧滑面板在滑动时,主页面是不会滑动的,也就是说,侧滑面板会遮盖住主页面的部分UI; 3、SlidingPaneLayout
binding.slidingPaneLayout.open() } 正如上面的代码中调用 slidingPaneLayout.open() 那样,在窄屏幕设备上,滑入显示详情窗格已经成为了导航过程中的用户可见部分 class ScheduleBackPressCallback( private val slidingPaneLayout: SlidingPaneLayout, private val listPaneNavController slidingPaneLayout.addPanelSlideListener(this) // 监听两个窗格内导航目的页面的变化。 && slidingPaneLayout.isOpen) } } SlidingPaneLayout 最近也针对可折叠设备进行了优化更新。 更多关于使用 SlidingPaneLayout 的信息,请参阅: 创建双窗格布局。 资源限定符的局限 搜索应用栏也在不同屏幕内容下显示不同内容。
.> <androidx.slidingpanelayout.widget.SlidingPaneLayout android:id="@+id/sliding_pane_layout navGraph="@navigation/task_detail" tools:layout="@layout/task_detail_fragment" /> </androidx.slidingpanelayout.widget.SlidingPaneLayout -SlidingPaneLayout 导航图--> <navigation... 另外,SlidingPaneLayout 提供了另一个重要特性是它不仅适用于大屏幕设备,而且适用于多屏幕设备。 Microsoft 最近为 SlidingPaneLayout 提供了一个支持铰链检测的功能,让其自动能够支持跨屏幕拆分窗口,而无需更改任何代码。
SlidingPaneLayout 为大屏幕优化应用时,最常见的自适应布局之一便是列表-细节 UI。比如短信应用在一边显示信息列表,另一边显示信息细节。 △ SlidingPaneLayout 会自动适应配置的变化,在不同的布局尺寸下提供良好的用户体验 在较小的屏幕上不得不堆叠起来的 UI,在大屏幕上则可以轻松实现并排布局。 为此,您可以使用更新的 SlidingPaneLayout 库。这个库如今支持双窗格布局,SlidingPaneLayout 会使用两个窗格的宽度来决定如何布局 UI。 例如,如果列表窗格的最小宽度为 200dp,而细节窗格需要 400dp,那么当窗口总宽度在 600dp 或以上时,SlidingPaneLayout 会自动将两个窗格并排显示。 △ SlidingPaneLayout 在我们的示例应用 IOSched 中使用的情况 我们已经更新了该库,以识别和适应 折叠和铰链。
列表/详情 对列表/详情而言,AndroidX 中有个名为 SlidingPaneLayout 的专用控件,使用前需为它的两个子元素指定 layout_width,在运行期间,SlidingPaneLayout 会判断是否有足够空间同时展示两个窗格: <SlidingPaneLayout …> <FragmentCOntainerView android : id=”@ (item) // 将详细信息窗格滑动到视图中 // 如果并排放置两个窗格 // 并不会产生实际效果 slidingPaneLayout.openPane() } 如上代码所示,您可以通过代码控制滑动窗格 顺便说一下,如果您使用 SlidingPaneLayout 来实现列表/详情布局,您会自动获得对书本模式的支持。 只要两个窗格都能容纳进去,SlidingPaneLayout 会将窗格置于折叠姿态的另一侧。
调整后 : 任务 (Tasks) 和归档 (Archive) 界面都通过 SlidingPaneLayout 显示 列表/详细信息布局。 我们展示了通过添加导航轨道和使用 SlidingPaneLayout,是如何让 Trackr 应用不仅看起来更好,同时还显著改善了可用性和创造了在手机上无法感受的体验的。
| | \--- com.android.support:customview:28.0.0 (*) | +--- com.android.support:slidingpanelayout | +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1 (*) | +--- androidx.slidingpanelayout :slidingpanelayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0 | +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1 (*) | +--- androidx.slidingpanelayout :slidingpanelayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
对于屏幕更宽的设备,我们新发布的 Material Design 指南 中提出了几个有关大屏幕布局的方案,例如可以使用 SlidingPaneLayout 来实现列表/细节结构。 对于已经使用 Fragment 的现有应用,虽然更新导航模式和使用 SlidingPaneLayout 等方式是针对大屏幕设备的布局优化的好方法,但我们了解到基于多个 Activity 的应用不在少数。 我们正致力于更新 SlidingPaneLayout 以支持这些 API,敬请关注未来几个月内的更新。
指南,包含生态系统中常见的 布局模式 的定义,有助于激发您的应用设计灵感; 窗口大小类 (Window Size Classes) 是一种新型断点框架,其代表了生态系统中典型设备场景的大多数情况更新 SlidingPaneLayout
| +--- androidx.drawerlayout:drawerlayout:1.0.0 -> 1.1.1 (*) | +--- androidx.slidingpanelayout :slidingpanelayout:1.0.0 | | +--- androidx.annotation:annotation:1.0.0 -> 1.3.0
META-INF/androidx.vectordrawable_vectordrawable-animated.version' exclude 'META-INF/androidx.slidingpanelayout_slidingpanelayout.version
META-INF/androidx.vectordrawable_vectordrawable-animated.version' exclude 'META-INF/androidx.slidingpanelayout_slidingpanelayout.version
META-INF/androidx.vectordrawable_vectordrawable-animated.version' exclude 'META-INF/androidx.slidingpanelayout_slidingpanelayout.version
JobService Android 5.0 v4 下拉刷新布局 SwipeRefreshLayout Android 5.0 抽屉布局 DrawerLayout Android 5.0 滑动面板布局 SlidingPaneLayout
2013年谷歌 I/O 大会上介绍了两个新的 layout: SlidingPaneLayout 和 DrawerLayout,现在这两个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了 ViewDragHelper
SlidingPaneLayout Adds widget for creating linked summary and detail views that appropriately adapt
这一 Fragment 使用 SlidingPaneLayout 管理一个列表窗格 (由您的子类管理),以及一个由 NavHostFragment 实现的详情窗格。 Jetpack 的 SlidingPaneLayout 组件已更新为使用 WindowManager 的智能布局 API,以避免内容被放置于被遮挡区域 (例如跨越物理铰链区域)。
| \--- com.android.support:customview:28.0.0 (*) | | | | +--- com.android.support:slidingpanelayout (c) +--- com.android.support:drawerlayout:{strictly 28.0.0} -> 28.0.0 (c) +--- com.android.support:slidingpanelayout