17

mam zdefiniowanej podstawowy układ koordynator moim zdaniem:Część fragmentu wewnątrz ViewPager uzyskiwanie obcięte na dole ekranu (Android)

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

Istnieje wiele wypustki moim zdaniem pager. Jestem delegowania jeden z moich prostych fragmentów:

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

Co się dzieje, że FAB wychodzi z ekranu. To po prostu nie FAB, ale inne fragmenty z widokami kart/listview są odcinane u dołu ekranu. Rozejrzałem się za rozwiązaniem i wpadłem na hacky: Usuwanie aplikacji właściwości: layout_scrollFlags = "scroll | enterAlways" z paska narzędzi.

Nie mogę zrozumieć, co może być przyczyną tego problemu, i jak usunięcie powyższego rozwiązało problem. Czy jest to jakiś błąd w bibliotece wsparcia? Czy istnieje lepszy sposób na rozwiązanie tego problemu? Innym rozwiązaniem, z którym miałem do czynienia, jest here - aby przycisk FAB był bezpośrednio pod układem koordynatora w działaniu i uczynić go widocznym tylko w wymaganym fragmencie. Nie wydawało mi się to dobrym rozwiązaniem. Także inne widoki w moich fragmentach również zostały odcięte.

+3

Usunąłem 'app: layout_scrollFlags =" scroll | enterAlways | snap "', a przewijanie działało poprawnie, a dno nie jest odcinane.Chciałem tylko zapytać, jakie są konsekwencje tej zmiany? Czy spotkałeś się z innymi rozwiązaniami tego problemu? –

+0

Znalazłem, że wystarczyło tylko usunięcie części 'scroll |'. Mam nadzieję, że w ten sposób będzie mniej możliwych implikacji, niż gdybym całkowicie usunął atrybut 'app: layout_scrollFlags' (?) –

Odpowiedz

1

Dzieje się tak, ponieważ używasz CoordinatorLayout z ListView. Możesz zmienić implementację na RecyclerView, aby uzyskać prawidłowy przewijanie.

sprawdź moją odpowiedź here. To może ci pomóc.

+0

Mam taki sam problem jak OP i nie używam' ListView' w moim 'ViewPager'. (Używam 'WebView'.) –

+0

Czy możesz spróbować zastąpić CordinatorLayout innym układem i sprawdzić, czy nadal się dzieje? – sha

+0

Jest OK, dzięki. Znalazłem rozwiązanie teraz, jak na moją odpowiedź: http://stackoverflow.com/a/39735185/1617737 –

20

Naprawiłem ten problem, zmieniając atrybut Toolbar na na tylko app:layout_scrollFlags="enterAlways".

+2

Problem, jeśli używam CollapsingToolbarLayout i musi używać atrybut przewijania. – Tefa

+0

Działa dla mnie, nie muszę dodawać spacji do dołu. –

3

Mam układ podobny do twojego: aktywność z paskiem narzędziowym u góry i zakładki. Wymaganiem dotyczącym fragmentów jest posiadanie własnych niezależnych funkcjonalnych bloków przestrzeni powietrznej.

nie może poradzić sobie z tym bezpośrednio w formacie XML, aby potem przybite w ten sposób:

układ aktywny

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

układ fragment:

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

I trochę kodu, aby FAB pozostało tam, gdzie miało być. 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

Usuń z paska przewijania atrybutu layout_scrollFlags. Powinieneś mieć coś takiego: app:layout_scrollFlags="enterAlways|enterAlwaysCollapsed"

Powiązane problemy