システムナビゲーションバーがコンテンツを覆い隠すのを止められません!
Recyclerviewの一番下までスクロールしましたが、ナビゲーションバーの後ろに隠れています。これが私のXMLレイアウトです。
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/root"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<include layout="@layout/toolbar"/>
<Android.support.design.widget.TabLayout
Android:id="@+id/tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:fitsSystemWindows="true"
Android:id="@+id/viewpager"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.melnykov.fab.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|right"
Android:layout_margin="16dp"
app:fab_colorNormal="@color/accent"
app:fab_colorPressed="@color/accent_dark" />
これは、写真に表示されているフラグメントのレイアウトです。
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:padding="8dp">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical"/>
</FrameLayout>
私はできる限りすべてのレイアウトにAndroid:fitsSystemWindows = "true"を追加しようとしましたが、うまくいきませんでした。他のスレッドはバーから計算されたマージンの追加について言及していますが、それは適切な解決策のようには見えません。私はこのレイアウトをappbarlayoutを使ってGoogleのCheesSquareアプリのデモから直接取得しましたが、うまく機能しているように見えます。
私はそれを考え出した。私の特定の状況では、私のフラグメントのそれぞれが独自のツールバーインスタンスを管理します。私はフラグメントのonViewCreated()メソッドでsetSupportActionBar()を呼び出していました。この機能をonCreateView()に移動することで解決しました。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_account, container, false);
setupToolbar((Toolbar) view.findViewById(R.id.toolbar));
return view;
}
private void setupToolbar(Toolbar toolbar) {
toolbarController.registerToolbar(toolbar);
toolbarController.setActivityTitle("My Account");
}
(registerToolbar()は、ホスティングアクティビティ内でsetSupportActionBar()を呼び出します)。
これが皆さんのお役に立てば幸いです!
ViewPagerをConstraintLayoutにラップし、viewpagerに設定します。
app:layout_constraintBottom_toBottomOf="parent"
それはうまくいくはずです
ViewpagerのフラグメントルートビューはRecyclerView
またはNestedScrollView
である必要があります。 FrameLayout
はCoordinatorLayout
のスクロール動作をサポートしていないため、うまく機能しません。
ビューページャーのフラグメントレイアウトを修正する方法:RecyclerView
をFrameLayout
でラップしないでください。代わりに、ルートでRecyclerView
を宣言します。 RecyclerView
にpadding="8dp"
を設定することもできます。Android:clipToPadding="false"
を使用するだけです。
問題はAppBarLayout
の使用です。 CoordinatorLayout
は強力なFrameLayout
として導入され、定義されたBehaviors
に基づいてニースアニメーションをもたらします。 scroll
アニメーションのようなものを追加したい場合、collapsing toolbar
などの場合、Toolbar
をAppBarLayout
でラップする必要がありますが、CoordinatorLayout
内にViewPager
などの静的コンテンツを配置する場合あなたの場合、AppBarLayout
を使用する必要はありません:
activity_main.xml:
<Android.support.design.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"
Android:fitsSystemWindows="true"
tools:context="com.mydemoci.MainActivity">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<include layout="@layout/content_main"/>
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
Android:layout_margin="@dimen/fab_margin"
Android:src="@Android:drawable/ic_dialog_email"/>
</Android.support.design.widget.CoordinatorLayout>
content_main.xml:
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#A1D490"
// Remember CoordinatorLayout is a kind of FrameLayout,
// so we have to provide top margin to make Toolbar visible
Android:layout_marginTop="?attr/actionBarSize"
tools:context="com.mydemoci.MainActivity"
tools:showIn="@layout/activity_main">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
Android:background="@color/colorAccent"
Android:text="Hello World"
Android:textSize="30sp"/>
</RelativeLayout>
Style.xmlに移動してこれら2つのアイテムを削除するか、それらの「true」値を「false」に設定します。
<item name="Android:windowTranslucentStatus">true</item>
<item name="Android:windowTranslucentNavigation">true</item>
私の場合、これらの2つのテーマスタイル値を削除することで問題は解決しました。
View Pager
にマージンの下を追加するだけで修正できます。
これが私のactivity_main.xmlのコードです
<Android.support.v4.view.ViewPager
Android:id="@+id/main_viewPager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginBottom="55dp"/>
<Android.support.design.widget.BottomNavigationView
Android:id="@+id/navigation"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />