5

Tôi gặp vấn đề khi tôi thử đặt các đoạn với CoordinatorLayout + AppBarLayout.CoordinatorLayout + ActionBar + Fragments

Tôi cố gắng tải các đoạn khác nhau vào nội dung RelativeLayout dưới ActionBar với thuộc tính app:layout_behavior="@string/appbar_scrolling_view_behavior" nhưng khi tôi tải đoạn có hai nút ở cuối màn hình, chúng được tải ra khỏi màn hình.

Nội dung trong đó các đoạn được tải ra ngoài màn hình và nội dung luôn luôn nằm ngoài phần dưới cùng.

này mã của main_activity.xml tôi:

<?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" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".views.activities.HomeActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBarLayout" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:theme="@style/AppTheme.AppBarOverlay" > 

     <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/AppTheme.PopupOverlay" 
      app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> 

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

    <!-- Fragment are loaded here --> 
    <RelativeLayout 
     android:id="@+id/containerLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" > 
    </RelativeLayout> 

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

Đây là ảnh chụp màn hình với nội dung ra màn hình.

enter image description here

Đây là ảnh chụp màn hình của đoạn nơi tôi có vấn đề: enter image description here

Đây là ảnh chụp màn hình với đoạn nạp trong giả lập. Bạn có thể thấy các nút dưới cùng không xuất hiện như thế nào. Chúng bị ẩn bởi thanh điều hướng:

enter image description here

Làm cách nào để ngăn chặn sự cố này?

EDIT

<android.support.design.widget.CoordinatorLayout 
    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:id="@+id/coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".views.activities.HomeActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBarLayout" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:theme="@style/AppTheme.AppBarOverlay" > 

     <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/AppTheme.PopupOverlay" 
      app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> 

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

    <!-- Main content --> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <FrameLayout 
      android:id="@+id/containerLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

     </FrameLayout> 

    </RelativeLayout> 

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

EDIT 2: Tôi đã cố gắng đưa vào ToolBar RelativeLayout, nhưng nó hoạt động một phần. Bây giờ không hoạt động hoạt hình trên actionBar khi cuộn vào recyclerView

<?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" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".views.activities.HomeActivity"> 

    <!-- Main content --> 
    <RelativeLayout 

     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" > 

     <android.support.design.widget.AppBarLayout 
      android:id="@+id/appBarLayout" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:theme="@style/AppTheme.AppBarOverlay" 
      android:layout_alignParentTop="true"> 

      <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/AppTheme.PopupOverlay" 
       app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> 

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

     <FrameLayout 
      android:id="@+id/containerLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/appBarLayout"> 

     </FrameLayout> 

    </RelativeLayout> 

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

Hãy thử đặt một 'FrameLayout' trong 'bạn RelativeLayout', và thổi phồng' của bạn Fragments' trong đó. – yennsarah

+0

Tôi sẽ thử giải pháp của bạn và tôi nhận xét bạn ngay bây giờ. Cảm ơn :) –

+0

@ Giải pháp của bạn không hoạt động: ( –

Trả lời

1

cuối cùng tôi đã tìm ra rằng những gì xảy ra với CoordinatorLayout là xem bên dưới AppBarLayout được kích thước cho chiều cao như nếu Toolbar đã được cuộn ra khỏi đường. Sau đó, khi thanh công cụ ở vị trí bình thường, chế độ xem chỉ đơn giản là bị đẩy xuống dưới. Nó không được thay đổi kích cỡ khi CoordinatorLayout cuộn mọi thứ lên.

Điều này có nghĩa là bất kỳ chế độ xem nào được đính kèm ở cuối chế độ xem đó đều sẽ bị cuộn ra ngoài và không hiển thị hoặc không nhìn thấy được một phần.

Vậy làm cách nào để khắc phục sự cố này? Bạn cần phải làm hai việc:

  1. Mang AppBarLayoutToolbar vào đoạn của bạn. Phân đoạn có thể thiết lập sự hỗ trợ ActionBar trên Toolbar và thực hiện mọi thứ thường được thực hiện trong hoạt động. Vì vậy bây giờ bố trí hoạt động của bạn có thể đơn giản như thế này:

    <FrameLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:id="@+id/containerLayout" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        tools:context=".views.activities.HomeActivity"/> 
    
  2. Đính kèm các nút để dưới cùng của CoordinatorLayout. CoordinatorLayout là một phân lớp của FrameLayout để bạn có thể có layout_gravity="bottom" trên chế độ xem con.Vì vậy bây giờ đoạn XML của bạn có thể trông như thế này:

    <?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" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:id="@+id/coordinator" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        tools:context=".views.activities.HomeActivity"> 
    
        <android.support.design.widget.AppBarLayout 
         android:id="@+id/appBarLayout" 
         android:layout_height="wrap_content" 
         android:layout_width="match_parent" 
         android:theme="@style/AppTheme.AppBarOverlay" > 
    
         <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/AppTheme.PopupOverlay" 
          app:layout_scrollFlags="scroll|enterAlways" /> <!-- Indica como afecta a los hijos de AppBar --> 
    
        </android.support.design.widget.AppBarLayout> 
    
        <RelativeLayout 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         app:layout_behavior="@string/appbar_scrolling_view_behavior" > 
    
         <!-- 
          rest of your fragment layout goes here 
          it needs to have a scrolling component 
          --> 
    
         <!-- 
          you *might* need a spacer in order to see 
          the bottom of your view over the top of 
          the buttons 
          --> 
         <Space 
          android:layout_width="match_parent" 
          android:layout_height="48dp" /> 
         <!-- or you could put a bottom margin on your layout --> 
    
        </RelativeLayout> 
    
        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="48dp" 
         android:layout_gravity="bottom"> 
    
         <!-- your buttons go here --> 
    
        </LinearLayout> 
    
    </android.support.design.widget.CoordinatorLayout> 
    
+0

Cách duy nhất mà nó hoạt động cho tôi là thêm android: paddingBottom = "? Attr/actionBarSize" –

+1

Tôi thêm android: paddingBottom = "? Attr/actionBarSize" vào phần của nút. Và như vậy với mỗi mảnh mà tôi đặt các mục trên dưới cùng của màn hình: ( –

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