2015-05-31 20 views
9

Tôi đang cố gắng để thực hiện một CoordinatorLayout từ mới công bố Android Design Support Library và tôi đã sử dụng đoạn mã sau trong cách bố trí XML của tôi theo mẫu here:CoordinatorLayout không làm việc

<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.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    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:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:layout_scrollFlags="scroll|enterAlways"/> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

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

Tuy nhiên thanh hành động không ẩn khi tôi cuộn xuống chế độ xem. Tôi không thể hiểu tại sao điều này không hiệu quả.

Edit: Theo như tôi biết nó xuất hiện mà CoordinatorLayout không làm việc với ListView/GridView/ScrollViews và chỉ làm việc với RecyclerViewNestedScrollView. Thật không may chỉ đơn giản là chuyển sang một trong những quan điểm này không phải là một khả năng cho tôi vì vậy tôi vẫn đang tìm kiếm một giải pháp.

+0

Bạn có thể sử dụng ListView/GridView và CoordinatorLayout với API21 +. –

Trả lời

4

Tôi tin rằng bạn cần phải thực hiện của bạn ListView thực hiện cả hai ScrollingViewNestedScrollingChild giao diện.

Đây không phải là điều đơn giản nhất, nhưng bạn có thể làm điều đó nếu bạn nhìn vào mã nguồn của RecyclerView. Nó sử dụng một NestedScrollingChildHelper và bạn sẽ có thể làm như vậy.

+2

Không đủ để triển khai giao diện NestedScrollingChild trong ListView của bạn. Kiểm tra: http://stackoverflow.com/questions/30696611/design-lib-coordinatorlayout-collapsingtoolbarlayout-with-gridview-listview/30885092#30885092 –

0

Tùy thuộc vào những gì bạn đang hiển thị trong số ViewPager. Nếu bạn sử dụng danh sách/recyclerview, nó sẽ cuộn chính xác.

+0

Tôi đang sử dụng một vài chế độ xem trong ViewPager, một trong số đó là một ListView. Tôi đã cố gắng chỉ sử dụng một ListView mà không có sự khác biệt. – dnlbaines

+0

Tôi sẽ thử nó với 'RecyclerView' và sử dụng thư viện hỗ trợ mới nhất:' compile 'com.android.support: recyclerview-v7: 22.2.0''.Các mảnh nên có chỉ recyclerview, không quấn nó vào bất kỳ bố trí khác. – aows

+0

Ứng dụng của tôi đang tải danh sách bài viết vào ListView nhưng sử dụng hai chế độ xem khác, để hiển thị trình quay số tiến trình và một số khác để hiển thị một số văn bản khi không có bài viết nào được tải - làm cách nào tôi có thể thực hiện điều này chỉ bằng RecyclerView? – dnlbaines

0

Quan điểm có thể khai báo một hành vi mặc định bằng (YourView.Behavior.class) chú thích CoordinatorLayout.DefaultBehavior, hoặc thiết lập nó trong file layout của bạn bằng với các ứng dụng: layout_behavior = "com.example.app.YourView $ Hành vi "thuộc tính. Khung làm việc này giúp mọi người có thể tích hợp với CoordinatorLayout.

Vì vậy, tôi nghĩ rằng giải pháp ở đây là ghi đè lên lớp AppBarLayout.Behavior

5

Currenlty không phải tất cả chế độ xem đều có hành vi mong đợi với CoordinatorLayout.

Quan điểm của bạn nên triển khai giao diện NestedScrollView và phải xử lý các sự kiện cuộn lồng nhau.

RecyclerViewNestedScrollView (phiên bản 22) hỗ trợ hành vi này. Tuy nhiên, bạn cũng có thể sử dụng AbsListView (ListViewGridView) nhưng chỉ với API21 +.

Chỉ cần thêm một cái gì đó như thế này:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    listView.setNestedScrollingEnabled(true); 
} 
+1

Cảm ơn bạn! Bạn đã làm cho ngày của tôi. –

Các vấn đề liên quan