Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何实现工具栏和底部导航都应该隐藏的滚动行为?其中只有一个有效_Android_Xml_Kotlin_Material Design_Android Coordinatorlayout - Fatal编程技术网

Android 如何实现工具栏和底部导航都应该隐藏的滚动行为?其中只有一个有效

Android 如何实现工具栏和底部导航都应该隐藏的滚动行为?其中只有一个有效,android,xml,kotlin,material-design,android-coordinatorlayout,Android,Xml,Kotlin,Material Design,Android Coordinatorlayout,我正在尝试实现协调器布局行为,其中滚动“回收器”视图可以同时隐藏工具栏和底部导航视图。到目前为止,我已经取得了一个成功,即底部导航底部栏确实隐藏了,但有一个警告,即即使在键盘打开的情况下,它仍然保持活动状态(我如何解决这个问题?) 我主要关心的是如何实现隐藏到工具栏的底部导航视图的相同功能 我在Appbar布局中包含了自定义工具栏,但我也尝试在Appbar中添加工具栏布局标记。没有效果,只是保持不变。 对于底部导航,我不知道该怎么做?到目前为止,我已经在底部导航视图中添加了snap滚动标志来停止

我正在尝试实现协调器布局行为,其中滚动“回收器”视图可以同时隐藏工具栏和底部导航视图。到目前为止,我已经取得了一个成功,即底部导航底部栏确实隐藏了,但有一个警告,即即使在键盘打开的情况下,它仍然保持活动状态(我如何解决这个问题?) 我主要关心的是如何实现隐藏到工具栏的底部导航视图的相同功能

我在Appbar布局中包含了自定义工具栏,但我也尝试在Appbar中添加工具栏布局标记。没有效果,只是保持不变。 对于底部导航,我不知道该怎么做?到目前为止,我已经在底部导航视图中添加了
snap
滚动标志来停止这种行为,而且snap标志也不起作用,我想是的,因为它在搜索点击时仍处于中间位置。 从这篇精彩的文章中得到了这个行为

活动\u main.xml


浏览器搜索点击tb.xml


BottomNavigationBehavior.kt

class BottomNavigationBehavior(上下文:上下文,属性:属性集):
CoordinatorLayout.Behavior(上下文、属性){
私有变量lastStartedType:Int=0
私有变量偏移动画:ValueAnimator?=null
var isSnappingEnabled=false
覆盖有趣的layoutDependsOn(父级:CoordinatorLayout,子级:V,依赖项:View):布尔值{
if(依赖项为Snackbar.Snackbar布局){
updateSnackbar(子项,依赖项)
}
返回super.layoutDependsOn(父、子、依赖项)
}
覆盖启动时的乐趣嵌套滚动(
coordinatorLayout:coordinatorLayout,子对象:V,directTargetChild:View,目标:View,轴:Int,类型:Int
):布尔值{
如果(轴!=ViewCompat.滚动\u轴\u垂直)
返回错误
lastStartedType=类型
偏移量?.cancel()
返回真值
}
覆盖所有已存储的数据滚动(
coordinatorLayout:coordinatorLayout,child:V,target:View,dx:Int,dy:Int,consumered:IntArray,type:Int
) {
super.onNestedPreScroll(协调布局、子项、目标、dx、dy、消耗、类型)
child.translationY=max(0f,min(child.height.toFloat(),child.translationY+dy))
}
覆盖趣味onStopNestedScroll(coordinatorLayout:coordinatorLayout,子级:V,目标:视图,类型:Int){
如果(!IsNappingEnabled)
返回
//添加快照行为
//这里的逻辑借用了AppBarLayout onStopNestedScroll代码
如果(lastStartedType==ViewCompat.TYPE|u TOUCH | TYPE==ViewCompat.TYPE_NON|u TOUCH){
//找到最近的接缝
val currtransation=child.translationY
val childHalfHeight=child.height*0.5f
//向下翻译
如果(currTranslation>=儿童半高){
animateBavisibility(子级,isVisible=false)
}
//向上翻译
否则{
animateBavisibility(子级,isVisible=true)
}
}
}
私有动画可视性(子:视图,可见:布尔){
if(offsetAnimator==null){
offsetAnimator=ValueAnimator()。应用{
插值器=减速器插值器()
持续时间=150L
}
offsetAnimator?.addUpdateListener{
child.translationY=it.animatedValue为Float
}
}否则{
偏移量?.cancel()
}
val targetTranslation=if(可见)0f else child.height.toFloat()
offsetAnimator?.setFloatValues(child.translationY,targetTranslation)
偏移器?.start()
}
私有乐趣更新nackbar(子:视图,snackbarLayout:Snackbar.snackbarLayout){
if(snackbarLayout.layoutParams是CoordinatorLayout.layoutParams){
val params=snackbarLayout.layoutParams作为CoordinatorLayout.layoutParams
params.anchorId=child.id
params.anchorgavity=重力.TOP
params.gravity=gravity.TOP
snackbarLayout.layoutParams=参数
}
}
}

因此,经过4天的思考,我终于解决了问题。以下是我所做的一些更改,并解决了问题: 活动\u main.xml


app:popupTheme=“@style/ThemeOverlay.AppCompat”
应用程序:contentInsetStart=“8dp”
app:contentInsetEnd=“8dp”
>
在browser_search_tb中,我删除了下面的一行,因为它覆盖了协调器布局中的滚动标志,所以删除了它,它工作得非常完美

app:layout\u scrollFlags=“scroll | enterally”

BottomNavigationBehavior.kt

覆盖趣味onStopNestedScroll(coordinatorLayout:coordinatorLayout,子级:V,目标:视图,类型:Int){
如果(!IsNappingEnabled)
return//删除此行
{
//添加快照行为
//这里的逻辑借用了AppBarLayout onStopNestedScroll代码
如果(lastStartedType==ViewCompat.TYPE|u TOUCH | TYPE==ViewCompat.TYPE_NON|u TOUCH){
//找到最近的接缝
val currtransation=child.translationY
val childHalfHeight=child.height*0.5f
//向下翻译
如果(currTranslation>=儿童半高){
animateBavisibility(子级,isVisible=false)
}
//向上翻译
否则{
animateBavisibility(子级,isVisible=true)
}
}
}
}
在这里,我删除了

返回

并将大括号{}添加到if语句和捕捉功能di中