webentwicklung-frage-antwort-db.com.de

Ein Teil des Fragments in ViewPager wird am unteren Bildschirmrand abgeschnitten (Android)

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.

22
shiladitya

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.

1
sha

Ich habe dieses Problem behoben, indem ich das app:layout_scrollFlags="scroll|enterAlways"-Attribut von Toolbar in app:layout_scrollFlags="enterAlways" geändert habe.

24

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;
    }
4
RoK

Es gibt zwei Lösungen für dieses Problem:

  • Sie können die scroll von Toolbar aus app:layout_scrollFlags entfernen (z. B. app:layout_scrollFlags="enterAlways") oder den gesamten app:layout_scrollFlags entfernen.
  • Wenn Sie das 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/

0
Desmond Lua

Entfernen Sie die Bildlaufleiste aus dem Attribut layout_scrollFlags der Werkzeugleiste. Sie sollten so etwas haben: app:layout_scrollFlags="enterAlways|enterAlwaysCollapsed"

0
hassan_codes