前提・実現したいこと
ViewPagerの実装を勉強しながらそれっぽいアプリのような形になるまでどんどん機能を追加していこうという勉強をしています。
ViewPagerが形になったのでBottomNavigationViewを追加して、こちらのサイトの「■スクロール時に隠す」の項を参考にしてBottomNavigationViewをスクロール時に隠すようにしようとしています。
BottomNavigationViewのカスタマイズ - Re.Ra.Ku アドベントカレンダー day 18
実装はサイトにあるものほぼそのまま(サイト上ではRecycleViewがあるところにViewPagerを指定してなかに長文TextViewを仕込んでいる)で、実際に動かしてみたところ下スクロールすると消えることは消えるのですが上スクロールしても表示が元に戻りません。
おかしいなと思い色々試していると、"起動時だけ"、childのgetTop, getBottomが0になっていることがわかりました。
しかし、なぜそうなっているのか、どう回避すれば良いかがわかりません。
ご教示お願いします。
試したこと
- 起動時に発動する時のchildがBottomNavigationViewではない別のなにかを拾っているのかと思ったのですが、childの中身はきちんとBottomNavigationViewであることをgetIdで確認しています。
- 起動後にBottomNavigationViewの最初以外のメニュー(※)をタップすると、正常にgetTop等が働いて目的通りの動作をします。
※メニューA,B,Cとある時、AをタップしてもonLayoutChildは発動せず、BまたはCをタップした時のみonLayoutChildが発動しています。なお各種メニューはイベント未設定のため現状見かけだけです。
該当のソースコード
activity_main.xml
XML
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/ll" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:orientation="vertical" 9 tools:context="com.hoge.viewpager.MainActivity"> 10 11 <android.support.design.widget.CoordinatorLayout 12 android:id="@+id/cl" 13 android:layout_width="match_parent" 14 android:layout_height="match_parent" 15 android:fitsSystemWindows="true"> 16 17 <android.support.v4.view.ViewPager 18 android:id="@+id/viewpager" 19 android:layout_width="match_parent" 20 android:layout_height="match_parent" 21 app:layout_behavior="@string/appbar_scrolling_view_behavior"> 22 23 </android.support.v4.view.ViewPager> 24 25 <android.support.design.widget.BottomNavigationView 26 android:id="@+id/bottomNavigationView" 27 android:layout_width="match_parent" 28 android:layout_height="wrap_content" 29 android:layout_gravity="bottom" 30 app:itemBackground="@color/colorPrimaryDark" 31 app:itemIconTint="@android:color/white" 32 app:itemTextColor="@android:color/white" 33 app:layout_behavior="com.hoge.viewpager.BottomNavigationBehavior" 34 app:layout_constraintBottom_toTopOf="@+id/viewpager" 35 app:layout_constraintEnd_toEndOf="@+id/viewpager" 36 app:layout_constraintHorizontal_bias="1.0" 37 app:layout_constraintStart_toStartOf="@+id/viewpager" 38 app:layout_constraintTop_toTopOf="parent" 39 app:menu="@menu/navigation" /> 40 41 </android.support.design.widget.CoordinatorLayout> 42 43</LinearLayout>
問題の箇所
Java
1 public boolean onLayoutChild(CoordinatorLayout parent, BottomNavigationView child, int layoutDirection) { 2 defaultTop = child.getTop(); 3 defaultBottom = child.getBottom(); 4 defaultHeight = defaultBottom - defaultTop; 5 Log.d(TAG, "onLayoutChild: "+defaultTop); //起動時0 メニューB,Cタップ時は正常に取得 6 Log.d(TAG, "onLayoutChild: "+defaultBottom); //起動時0 メニューB,Cタップ時は正常に取得 7 Log.d(TAG, "onLayoutChild: "+defaultHeight); 8 Log.d(TAG, "onLayoutChild: "+ _context.getResources().getResourceEntryName(child.getId()) ); //起動時ちゃんとbottomNavigationViewが表示される 9 10 return super.onLayoutChild(parent, child, layoutDirection); 11 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/07 05:13 編集
2018/05/07 06:00
2018/05/07 06:33