batchのブログ

知見の備忘録

BottomNavigationViewを使ったときにFragmentの下が隠れるときの対処法というかそもそもConstraintLayout使うときmatch_parentは使わないほうがいい

はじめに

Android 初心者向け Advent Calendar 2019の12日目の記事です.

BottomNavigationViewを使ってFragmentの中にRecyclerViewを設置したとき,一番下の部分だけ下のBottomNavigationViewに隠れて見えなくなる.

みたいな経験したことないですか?

原因はこれ.
f:id:batch08:20191114103856p:plain

NavHostFragmentを管理しているMainActivityのレイアウトです.

このfragmentのlayout_heightがmatch_parentになっているのが問題です.

自分は解決方法がわからなく,Fragmentのbottom marginをいい感じにBottomNavigationViewに隠れないようにしてたりしました…

解決方法

じゃあどうすればよいのか.

結論をいうと,さっきmatch_parentだったlayout_heightを0dpにするだけです.

これで直ります!
f:id:batch08:20191114104903p:plain

直して思ったのですが,match_parentはmatch_parentですよね.

一応,ConstraintLayoutなのでfragmentのbottomはBottomNavigationViewのtopにくるように制約をかけていますが,match_parentにしてしまうとその制約も突っ走ってmatchなparentまでいってしまいます.


なので,基本ConstraintLayoutでlayoutを組むときに制約をかけたとこまでいっぱいに表示したいというときは0dpをつかうと良いみたいです.

ハマってたワケ

なんで僕がこのBottomNavigationViewを使ったときのfragmentのlayoutにハマってた理由なのですが,公式が悪いです…


Android StudioでNew ProjectするときにBottomNavigationViewを使ったサンプルを作ることができますよね.
f:id:batch08:20191114104832p:plain

これですこれ.


これでNew Projectしたときのactivity_mainが一枚目にあげた状態になっているのです.


最初に作られるサンプルがああいう感じだからそれが正解だと思っていました…


初心者には変につまづくポイントになってしまっている気がするので修正してほしいところです.


以上,ミニマリストエンジニアbatchでした.