Скрыть AppBarLayout и BottomNavigationView одним нажатием - PullRequest
0 голосов
/ 25 декабря 2018

извините за плохой английский

У меня есть AppBarLayout, Webview и BottomNavigationView.

Я хочу показать / скрыть AppBarLayout и BottomNavigationView одним нажатием.

<?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"
  >

  <com.google.android.material.appbar.AppBarLayout
    android:id="@+id/appbar_chT"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <androidx.appcompat.widget.Toolbar
      android:id="@+id/toolbar_chT"
      android:layout_width="match_parent"
      android:layout_height="?attr/actionBarSize"
      app:layout_scrollFlags="scroll|enterAlways"
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
      app:title=""/>

  </com.google.android.material.appbar.AppBarLayout>


  <WebView
    android:id="@+id/textWebview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:hardwareAccelerated="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    />


  <com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/button_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@color/webViewBackground"
    app:layout_behavior="BottomNavigationBehavior"
    app:menu="@menu/chapter_bottom"/>

  <ProgressBar
    android:id="@+id/webViewProgressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Мой пользовательскийBottomNavigationBehavior, но у него нет хорошей логики

class BottomNavigationBehavior<V : View>(context: Context, attrs: AttributeSet) :
        CoordinatorLayout.Behavior<V>(context, attrs) {

    override fun layoutDependsOn(parent: CoordinatorLayout, child: V, dependency: View): Boolean {
        if (dependency is Snackbar.SnackbarLayout) {
            updateSnackbar(child, dependency)
        }
        if (dependency is WebView) {
            updateWebView(child, dependency)
        }
        return super.layoutDependsOn(parent, child, dependency)
    }


    private fun updateSnackbar(child: View, snackbarLayout: Snackbar.SnackbarLayout) {
        if (snackbarLayout.layoutParams is CoordinatorLayout.LayoutParams) {
            val params = snackbarLayout.layoutParams as CoordinatorLayout.LayoutParams

            params.anchorId = child.id
            params.anchorGravity = Gravity.TOP
            params.gravity = Gravity.TOP
            snackbarLayout.layoutParams = params
        }
    }

    private fun updateWebView(child: View, webview: WebView) {

    }

}

Для веб-просмотра у меня есть следующий код

textWebview.setOnTouchListener( object: OnSwipeTouchListener(applicationContext) {           

        override fun onTap() {
            if (appbar_chT != null) {
                val fullyExpanded = (appbar_chT!!.height - appbar_chT!!.bottom == 0) && (bottomNavigationView.height == bottomNavigationView.bottom - bottomNavigationView.top)

                appbar_chT?.setExpanded(!fullyExpanded)

                bottomNavigationView.updateView(fullyExpanded)

            }
        }
    })

private fun BottomNavigationView.updateView(fullyExpanded: Boolean) {
    if (fullyExpanded)
        this.animate().translationY(this.height.toFloat())
    else
        this.animate().translationY(0f)
}

Итак, все работает нормально, но моя проблема в том, что я не могу увидеть полный текств WebView в режиме «бары»

Первое изображение Второе изображение

Как видно на изображениях выше, я не вижу 19и 20 строк, потому что они находятся под нижней панелью (я больше не могу прокручивать webView)

Не могли бы вы дать мне несколько советов или, возможно, есть другой способ реализовать такую ​​функциональность?

Спасибо

1 Ответ

0 голосов
/ 27 декабря 2018

Я изменил макет корня на ConstraintLayout и использовал

 android:animateLayoutChanges="true"

с

visibility = View.GONE //or  
visibility = View.VISIBLE 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...