Ich habe ein grundlegendes Koordinatorlayout für meine Ansicht definiert:
<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>
Mein Pager für die Ansicht enthält mehrere Registerkarten. Ich poste eines meiner einfachen Fragmente:
<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" />
Was passiert ist, dass die FAB den Bildschirm verlässt. Es ist einfach nicht das FAB, aber andere Fragmente mit Karten-/Listenansichten werden am unteren Rand des Bildschirms abgeschnitten. Ich schaute mich nach einer Lösung um und fand eine harte Lösung: Entfernen der Eigenschaft app: layout_scrollFlags = "scroll | enterAlways" aus der Toolbar .
Ich kann nicht verstehen, was dies bewirken könnte und wie das Problem durch das Entfernen des obigen gelöst wurde. Ist es ein Fehler in der Support-Bibliothek? Gibt es einen besseren Weg, um dies zu lösen? Eine andere Lösung, auf die ich gestoßen war, ist aus here -, um die FAB-Schaltfläche direkt unter einem Koordinator-Layout in der Aktivität zu belassen und nur in dem Fragment sichtbar zu machen, das Sie benötigen. Schien mir nicht nach einer guten Lösung. Auch andere Ansichten in meinen Fragmenten wurden abgeschnitten.
Dies liegt daran, dass Sie CoordinatorLayout
mit ListView
verwenden. Sie können Ihre Implementierung in RecyclerView
ändern, um einen korrekten Bildlauf zu erzielen.
überprüfe meine Antwort hier . Das kann dir helfen.
Ich habe dieses Problem behoben, indem ich das app:layout_scrollFlags="scroll|enterAlways"
-Attribut von Toolbar in app:layout_scrollFlags="enterAlways"
geändert habe.
Ich habe ein Layout, das Ihrem ähnlich ist: Aktivität mit einer Symbolleiste, die oben angezeigt wird, und Registerkarten. Und für Fragmente müssen eigene unabhängige FABs vorhanden sein.
Ich konnte damit nicht direkt in der XML zurechtkommen, also habe ich es so gemacht:
Aktivitätslayout
<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" />
Fragmentlayout:
<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" />
Und ein bisschen Code, damit die FAB dort bleibt, wo sie beabsichtigt war. Fragment 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;
}
Es gibt zwei Lösungen für dieses Problem:
scroll
von Toolbar aus app:layout_scrollFlags
entfernen (z. B. app:layout_scrollFlags="enterAlways"
) oder den gesamten app:layout_scrollFlags
entfernen.scroll
-Attribut benötigen, muss das Hauptlayout-Inhalt/Fragment RecyclerView
oder NestedScrollView
verwenden.https://code.luasoftware.com/tutorials/Android/bottom-of-fragment-in-viewpager-out-of-screen/
Entfernen Sie die Bildlaufleiste aus dem Attribut layout_scrollFlags der Werkzeugleiste. Sie sollten so etwas haben: app:layout_scrollFlags="enterAlways|enterAlwaysCollapsed"