Как скрыть нижнюю панель приложения при прокрутке в Android - PullRequest
0 голосов
/ 18 марта 2019

Я делаю приложение для Android, у которого есть действие, а другое действие реализует основное действие. Теперь я также реализую один фрагмент из множества действий. Поэтому каждое действие имеет по крайней мере 7-8 фрагментов внутри этого. Вот макет для моей основной деятельности.

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="60dp"
    android:id="@+id/frame_lay">

</FrameLayout>



<View
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:layout_above="@id/bottom_appbar"
    app:layout_anchor="@+id/bottom_appbar"

    android:background="@android:color/darker_gray"/>

<com.google.android.material.bottomappbar.BottomAppBar
    android:id="@+id/bottom_appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:backgroundTint="@color/colorbottomappbar"
    app:fabAlignmentMode="center"
    app:navigationIcon="@drawable/ic_menu_green_24dp">

</com.google.android.material.bottomappbar.BottomAppBar>



<ImageButton
    android:id="@+id/fab"
    android:layout_width="190dp"
    android:layout_height="80dp"
    android:visibility="visible"
    app:layout_anchorGravity="center_horizontal|bottom"
    android:background="@drawable/logo"
    app:layout_anchor="@+id/bottom_appbar"
    android:layout_marginBottom="17dp"/>

<ImageButton
    android:id="@+id/fab_two"
    android:layout_width="190dp"
    android:layout_height="80dp"
    android:visibility="gone"
    app:layout_anchorGravity="center_horizontal|bottom"
    android:background="@drawable/logotwo"
    android:elevation="5dp"
    app:layout_anchor="@+id/bottom_appbar"
    android:layout_marginBottom="13dp">


</ImageButton>

Вы можете видеть, что моя основная деятельность имеет макет кадра, в котором я выполняю все фрагменты. Я использовал кнопку изображения вместо плавающей кнопки действия, так как я хочу плавающую кнопку действия овальной формы. Теперь, что я хочу, чтобы внутри фрагмента когда пользователь прокручивает, то скрывается кнопка изображения, bottomappbar и вид горизонтальной линии? Нижняя панель приложения используется во многих фрагментах, поэтому мне нужен код, который я могу написать в действии, которое скрывает панель bottomapp и кнопку изображения, пока пользователи прокручивают фрагмент. Как я могу добиться этого? Я прошу прощения за мой глупый вопрос, поскольку я новичок в разработке Android. Спасибо заранее.

Ответы [ 3 ]

0 голосов
/ 18 марта 2019

Вы можете достичь этого, добавив следующий атрибут к вашему BottomAppBar:

app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
0 голосов
/ 18 марта 2019

Поскольку вы прокручиваете фрагмент, вам нужно передать значения прокрутки в вашу активность.

Я предлагаю вам использовать значение по умолчанию InteractionInterface, которое Android Studio сгенерировало в шаблоне Fragment:

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val root = inflater.inflate(R.layout.fragment_blank, container, false)
    root.scrollView2.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
        // the key is here.
        var delta = scrollY - oldScrollY
        listener?.onFragmentScrolled(delta)
    }
    return inflater.inflate(R.layout.fragment_blank, container, false)
}


interface OnFragmentInteractionListener {
    // Name your function here
    fun onFragmentScrolled(delta: Float)
}

// the lines below are generated,
// not the key point here but important to binding listener
override fun onAttach(context: Context) {
    super.onAttach(context)
    if (context is OnFragmentInteractionListener) {
        listener = context
    } else {
        throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener")
    }
}

override fun onDetach() {
    super.onDetach()
    listener = null
}

А затем, в YourActivity, реализовать YourFragment.OnFragmentInteractionListener

Переопределите функцию

override fun onFragmentScrolled(delta: Float) {
    anotherView.translationY = anotherView.translationY + delta
    if (anotherView.translationY > anotherView.height)
        anotherView.translationY = anotherView.height.toFloat()
    if (anotherView.translationY < 0)
        anotherView.translationY = 0f
}

результат будет примерно таким: mp4 link

Суть в том, что: передайте действие прокрутки из фрагмента в действие, вы можете этого добитьсяво многих отношениях это только основной;

0 голосов
/ 18 марта 2019

Вы можете добиться этого, поместив две строки ниже в xml

app:hideOnScroll="true"
app:layout_scrollFlags="scroll|enterAlways"

Таким образом, полный тег xml будет

<com.google.android.material.bottomappbar.BottomAppBar
    android:id="@+id/bottom_app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:fabAlignmentMode="center"
    app:hideOnScroll="true"
    app:layout_scrollFlags="scroll|enterAlways"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...