首页 > 解决方案 > Android CoordinatorLayout 以编程方式触发 Hide-Bottom-on-Scroll 行为

问题描述

我的设置是这样的:

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

        <RadioButton
            android:id="@+id/scroll_up_radioButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Scroll Up" />

        <RadioButton
            android:id="@+id/scroll_down_radioButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Scroll Down" />

    </RadioGroup>

    <TextView
        android:id="@+id/bottom_textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:text="Botton TextView"
        android:textColor="@color/black"
        android:textSize="30sp"
        android:gravity="center"
        android:layout_gravity="bottom"
        app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

如何使用代码使底部像这样TextView隐藏?我尝试了一些东西但没有奏效:

binding.scrollUpRadioButton.setOnCheckedChangeListener { compoundButton, isChecked ->
    if (isChecked) {
        val params = binding.bottomTextView.layoutParams as CoordinatorLayout.LayoutParams

        params.behavior = AppBarLayout.ScrollingViewBehavior()

        binding.bottomTextView.requestLayout()
    }
}

标签: androidandroid-viewandroid-scrollviewandroid-coordinatorlayoutandroid-appbarlayout

解决方案


具有以下HideBottomViewOnScrollBehavior公共方法以编程方式隐藏或显示视图:

public void slideDown (V child) - 执行一个动画,将孩子从当前位置滑动到完全离开屏幕。

public void slideUp (V child) - 执行一个动画,将孩子从当前位置滑动到完全在屏幕上。

因此,根据您的示例,您可以使用以下帮助程序以编程方式显示/隐藏底部 TextView:

private fun showBottomTextView(bottomTextView: TextView){
    val params = bottomTextView.layoutParams as CoordinatorLayout.LayoutParams
    val behavior = params.behavior as HideBottomViewOnScrollBehavior
    behavior.slideUp(bottomTextView)
}

private fun hideBottomTextView(bottomTextView: TextView){
    val params = bottomTextView.layoutParams as CoordinatorLayout.LayoutParams
    val behavior = params.behavior as HideBottomViewOnScrollBehavior
    behavior.slideDown(bottomTextView)
}

推荐阅读