17

I definiert habe ein grundlegendes Coordinator Layout für meine Ansicht abgeschnitten. Ich bin Entsendung einer meiner einfachen Fragmente:Teil des Fragments innerhalb ViewPager immer am unteren Rande des Bildschirms (Android)

<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 der FAB aus dem Bildschirm geht. Es ist einfach nicht das FAB, aber andere Fragmente mit Kartenansichten/Listenansichten werden am unteren Bildschirmrand abgeschnitten. Ich suchte nach einer Lösung und kam zu einer Lösung mit Hacky: Entfernen der Eigenschaft app: layout_scrollFlags = "scroll | enterAlways" aus der Symbolleiste.

Ich kann nicht verstehen, was könnte dazu führen, dass und das Entfernen der oben genannten das Problem gelöst. Ist es ein Fehler in der Support-Bibliothek? Gibt es einen besseren Weg, dies zu lösen? Eine andere Lösung, die ich gefunden habe, ist von here - um die FAB-Schaltfläche direkt unter einem Coordinator-Layout in der Aktivität zu halten und sie nur in dem Fragment sichtbar zu machen, das Sie benötigen. Scheint nicht wie eine gute Lösung für mich. Auch andere Ansichten in meinen Fragmenten wurden abgeschnitten.

+3

Ich entfernte 'app: layout_scrollFlags =" scroll | enterAlways | snap "' und das Scrollen funktionierte ordnungsgemäß und der Boden wird nicht geschnitten.Ich wollte nur fragen, welche Auswirkungen diese Änderung hat. Sind Sie auf andere Lösungen für dieses Problem gestoßen? –

+0

Ich fand, dass nur das Entfernen des 'scroll |' - Teils ausreichend war. Hoffentlich wird es dadurch weniger mögliche Auswirkungen geben, als wenn ich das 'app: layout_scrollFlags' Attribut komplett (?) Entfernen würde. –

Antwort

1

Dies ist, weil Sie CoordinatorLayout mit ListView verwenden. Sie können Ihre Implementierung in RecyclerView ändern, um den korrekten Bildlauf zu erreichen.

Überprüfen Sie meine Antwort here. Dies kann dir helfen.

+0

Ich habe das gleiche Problem wie das OP und ich benutze keine' ListView' in meinem 'ViewPager'. (Ich benutze ein 'WebView'.) –

+0

Können Sie versuchen, CordinatorLayout durch ein anderes Layout zu ersetzen und sehen, ob es noch passiert? – sha

+0

Es ist OK, danke. Ich habe jetzt eine Lösung gefunden, gemäß meiner Antwort: http://stackoverflow.com/a/39735185/1617737 –

20

Ich habe dieses Problem behoben, indem der Toolbar s‘Ändern app:layout_scrollFlags="scroll|enterAlways" Attribut nur app:layout_scrollFlags="enterAlways".

+2

Das Problem, wenn ich CollapsingToolbarLayout verwende und Scroll-Attribut verwenden muss. – Tefa

+0

Funktioniert für mich, ich muss keinen Platz an der Unterseite hinzufügen. –

3

Ich habe ein ähnliches Layout wie Sie: Aktivität mit einer Symbolleiste von oben und Tabs. Und die Forderung nach Fragmenten besteht darin, eigene unabhängige FABs zu haben.

ich nicht mit ihm direkt in der XML bewältigen konnte, also dann genagelt ich es so:

Aktivität Layout

<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" /> 

Fragment Layout:

<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 der FAB bleibt, wo er sein wollte. 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; 
    } 
0

Entfernen blättern in der Symbolleiste layout_scrollFlags zuzuschreiben. Sie sollten etwas wie das haben: app:layout_scrollFlags="enterAlways|enterAlwaysCollapsed"

Verwandte Themen