ビューの基本的なコーディネーターレイアウトを定義しました。
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<Android.support.design.widget.TabLayout
Android:id="@+id/tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:tabIndicatorColor="@color/white"
app:tabMode="fixed"/>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:id="@+id/viewpager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</Android.support.design.widget.CoordinatorLayout>
ビューページャーには複数のタブがあります。私は私の単純な断片の1つを投稿しています:
<ListView
Android:id="@+id/transferList"
Android:layout_width="match_parent"
Android:layout_height="match_parent"></ListView>
<Android.support.design.widget.FloatingActionButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_marginBottom="@dimen/activity_vertical_margin"
Android:layout_marginRight="@dimen/activity_horizontal_margin"
Android:layout_alignParentRight="true"
Android:src="@drawable/ic_add_white" />
何が起こるかというと、FABが画面から消えます。これはFABだけではありませんが、カードビュー/リストビューを含む他のフラグメントが画面の下部で切り取られています。私は解決策を探し回って、ハッキーな解決策を思いつきました:ツールバーからプロパティapp:layout_scrollFlags = "scroll | enterAlways"を削除します。
これが発生する原因と、上記を削除することで問題がどのように解決されたかがわかりません。サポートライブラリのバグですか?これを解決するためのより良い方法はありますか?私が遭遇した別の解決策は、 ここ -からです。アクティビティのコーディネーターレイアウトのすぐ下にFABボタンを保持し、必要なフラグメントでのみ表示できるようにします。私には良い解決策のようには思えませんでした。また、私の断片の他のビューも途絶えていました。
これは、CoordinatorLayout
とListView
を使用しているためです。実装をRecyclerView
に変更して、正しいスクロールを実現できます。
私の答えを確認してください ここ 。これはあなたを助けるかもしれません。
Toolbarのapp:layout_scrollFlags="scroll|enterAlways"
属性をapp:layout_scrollFlags="enterAlways"
だけに変更することで、この問題を修正しました。
私はあなたと同じようなレイアウトを持っています:ツールバーが上部とタブから外れるアクティビティ。また、フラグメントの要件は、独自の独立したFABを持つことです。
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/main_content"
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:fitsSystemWindows="true"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:layout_marginBottom="20dp"
Android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<Android.support.design.widget.TabLayout
Android:id="@+id/tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:tabContentStart="72dp"
app:tabMode="scrollable" />
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:id="@+id/viewpager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
フラグメントレイアウト:
<FrameLayout 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">
<include
Android:id="@+id/scroll"
layout="@layout/content_activity_main"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|right|end"
Android:src="@Android:drawable/ic_input_add"
app:borderWidth="0dp"
app:fabSize="mini"
app:useCompatPadding="true" />
そして、FABを意図した場所にとどまらせるためのコード。 フラグメントonCreateView:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_tabs2, container, false);
final FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.fab);
final TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.tabs);
final AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appbar);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
int maxAbsOffset = appBarLayout.getMeasuredHeight() - tabLayout.getMeasuredHeight();
fab.setTranslationY(-maxAbsOffset - verticalOffset);
}
});
return rootView;
}
この問題には2つの解決策があります。
scroll
をapp:layout_scrollFlags
から削除するか(例:app:layout_scrollFlags="enterAlways"
)、app:layout_scrollFlags
全体を削除できます。scroll
属性が必要な場合、メインレイアウトコンテンツ/フラグメントはRecyclerView
またはNestedScrollView
を使用する必要があります。https://code.luasoftware.com/tutorials/Android/bottom-of-fragment-in-viewpager-out-of-screen/
ツールバーのlayout_scrollFlags属性からスクロールを削除します。次のようなものが必要です:app:layout_scrollFlags="enterAlways|enterAlwaysCollapsed"