7

CoordinatorLayoutとAppBarLayoutを使用するとさらに問題が発生します。CoordinatorLayout/AppBarLayout ExpandableListViewが画面外にレンダリングされる

スクロールして画面をスクロールして画面上に戻るときに、ツールバーのスクロールが画面外にスクロールされるという基本的な機能を実現しようとしています。

私の現在の設定は問題を示しています:ツールバーがスクロールしていないだけでなく、リストビューが画面の下部に表示されているようです。 AppBarLayoutの高さによってオフセットされているかのようです。ここで

は、問題を記述したGIFで、スクロールバーがオフになっても、最後の項目が遮断されていることに注意してください画面:

enter image description here

私のレイアウトはかなり標準です:

<?xml version="1.0" encoding="utf-8"?> 
<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:background="@color/background"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?android:attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      android:background="@color/orange" 
      app:layout_scrollFlags="scroll|enterAlways"/> 

    </android.support.design.widget.AppBarLayout> 


    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipeToRefresh" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <ExpandableListView 
      android:id="@+id/listView" 
      android:groupIndicator="@android:color/transparent" 
      android:layout_width="match_parent" 
      android:dividerHeight="0px" 
      android:layout_height="match_parent"/> 
    </android.support.v4.widget.SwipeRefreshLayout> 

</android.support.design.widget.CoordinatorLayout> 
+0

をそれはあなたがより良い「RecyclerViewを言うべき – waleedsarwar86

答えて

8

CoordinatorLayout RecyclerViewまたはNestedScrollView.Tryでのみ動作します.ExcelandListViewをNestedScrollView内にラップするか、下のコードを使用してExpandableListViewのNestedScrollingEnableを作成します。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    expandablelistView.setNestedScrollingEnabled(true); 
}else { 
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mSwipeLayout.getLayoutParams(); 
    params.bottomMargin = heightOfAppBarCompat; 
    mSwipeLayout.setLayoutParams(params); 
} 

編集 else文で事前に21を期待通りにあなたは仕事をスクロールすることができます。

+0

を働いていたなら、私が知っているようで、私の答えを見てください - または - NestedScrollView "... –

+1

@MartinPfeffer – waleedsarwar86

+0

訂正ありがとう、ExpandableListViewで有効になっているネストされたスクロールを設定すると、それが修正されます。私はv21以前のデバイスのためのあなたの答えにハックを加えました、あなたが気にしないことを願っています。 – Graeme

0

私はコメントとして書いていますが、読みやすさの観点から私はこの情報を回答として削除します。それが動作しない場合、私に知らせて、私はそれを削除します... 私はあなたのツールバーに対話する方法を言う必要がありますね。私のアプリでは、ツールバーは、次のようになります。

<android.support.v7.widget.Toolbar 
      android:id="@+id/anim_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

「アプリ:layout_collapseMode」注意してください

0
private int mPreviousVisibleItem; 


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     expListView.setNestedScrollingEnabled(true); 
    } else { 
     expListView.setOnScrollListener(new AbsListView.OnScrollListener() { 

      @Override 
      public void onScrollStateChanged(AbsListView view, int scrollState) { 
      } 

      @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
       if (firstVisibleItem > mPreviousVisibleItem) { 
        appBarLayout.setExpanded(false, true); 
       } else if (firstVisibleItem < mPreviousVisibleItem) { 
        appBarLayout.setExpanded(true, true); 
       } 
       mPreviousVisibleItem = firstVisibleItem; 
      } 
     }); 
    } 
関連する問題