2015-07-23 17 views
26

Tôi có một FrameLayout bên trong CoordinatorLayout để thổi phồng các mảnh của tôi có chứa RecyclerView. Vấn đề là, tôi muốn hiển thị thanh tiến trình khi tải RecyclerView, nhưng thanh tiến trình luôn ở trên cùng của màn hình dưới Toolbar. Tôi đã thử các bố cục khác nhau, thiết lập gravity hoặc centerInParent nhưng không có cách nào hoạt động. Vậy có cách nào để đạt được điều này không?Có thể căn giữa bố cục/chế độ xem bên trong CoordinatorLayout không?

+0

Cùng một vấn đề ở đây ... –

Trả lời

5

Sau khi một số nghiên cứu tôi thất bại trong việc tìm ra một cách để làm cho công việc này, vì vậy cuối cùng tôi đã làm điều này:

  1. Đặt thanh tiến trình bên trong CoordinatorLayout với android:layout_gravity="center".
  2. Trong hoạt động, làm cho 2 phương pháp để hiển thị thanh/hide tiến bộ:

    public void showProgress() { 
         progressBar.setVisibility(View.VISIBLE); 
    } 
    
    public void hideProgress() { 
         progressBar.setVisibility(View.INVISIBLE); 
    } 
    
  3. Trong đoạn, có được một tài liệu tham khảo của các hoạt động nêu trên thông qua getActivity(), đúc nó vào hoạt động thực tế và gọi cần thiết phương pháp.

    context = getActivity(); 
    ((MainActivity)context).showProgress(); 
    

EDIT: điều này dường như được cố định trong thư viện hỗ trợ 23.1.1

+0

Chính xác "cố định" là gì? Và làm thế nào? –

+0

@androiddeveloper thời gian qua tôi đã kiểm tra với thư viện hỗ trợ 23.1.1, tôi đã có thể đạt được kết quả mong muốn như được mô tả trong câu hỏi mà không sử dụng "hack" trong câu trả lời này. –

+0

Ồ, tôi hiểu rồi. Nó chỉ là trong trường hợp của tôi, nó ở trung tâm chỉ khi khu vực phía trên được mở rộng, và tôi muốn nó được tập trung khi nó sụp đổ, bởi vì tôi làm cho nó sụp đổ theo mặc định ... –

0

Sử dụng FrameLayout bên trong RelativeLayout và đặt thuộc tính CenterInParent vào thanh tiến trình.

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

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

    </FrameLayout> 

    <ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" /> 

</RelativeLayout> 
+0

cảm ơn, nhưng thanh tiến trình phải nằm trong xml của đoạn. –

2

Tôi đã tạo ra tôi Xem Giống như:

<?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:wheel="http://schemas.android.com/tools" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/order_list_app_bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/order_list_collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleMarginEnd="64dp" 
      app:expandedTitleMarginStart="48dp" 
      app:layout_scrollFlags="scroll|enterAlways"> 

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:padding="@dimen/padding_normal"> 

       <TextView 
        android:id="@+id/order_list_outstanding_amount" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignTop="@android:id/icon" 
        android:layout_margin="@dimen/margin_normal" 
        android:layout_marginLeft="@dimen/margin_high" 
        android:layout_toRightOf="@android:id/icon" 
        android:text="@string/format_outstanding_amout" 
        android:textColor="@android:color/white" 
        android:textSize="@dimen/font_large" /> 
      </RelativeLayout> 
     </android.support.design.widget.CollapsingToolbarLayout> 
    </android.support.design.widget.AppBarLayout> 


     <android.support.v7.widget.RecyclerView 
      android:id="@+id/order_list_recycler_view" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

     </android.support.v7.widget.RecyclerView> 

     <android.support.design.widget.FloatingActionButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|right" 
      android:layout_margin="16dp" 
      android:src="@android:drawable/ic_input_add" 
      app:layout_anchor="@id/order_list_recycler_view" 
      app:layout_anchorGravity="bottom|right|end" /> 

     <include 
      android:id="@+id/order_list_empty_view" 
      layout="@layout/empty_view"></include> 

    <com.pnikosis.materialishprogress.ProgressWheel 
     android:id="@+id/progress_wheel" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_gravity="center" 
     wheel:matProg_barColor="@color/colorAccent" /> 
</android.support.design.widget.CoordinatorLayout> 

enter image description here

+0

Nó có thể hoạt động nếu bạn không sử dụng phân đoạn. Tuy nhiên như được mô tả trong bài đầu tiên của tôi, tôi sử dụng 'FrameLayout' bên trong' CoordinatorLayout' để thổi phồng các mảnh của tôi, chứa một 'RecyclerView',' TextView' và 'ProgressBar'. Trong trường hợp đó, không có thuộc tính trọng lực nào hoạt động. –

29
android:layout_gravity="center" 

công trình tốt. Và loại bỏ FrameLayout của bạn, nó dư thừa.

+0

'FrameLayout' là chế độ xem để làm tăng phân đoạn. Nó không phải là ViewGroup ngoài cùng. –

+1

Hoạt động tốt, cảm ơn – Ajji

0

Đặt CoordinatorLayout bên trong RelativeLayout và thêm thanh tiến trình vào trong RelativeLayout này. Đặt CenterInParent cho thanh tiến trình thành true. Thực hiện thanh tiến trình Đã qua/Hiển thị theo nhu cầu.

+0

Trong thực tế, bạn không cần phải đặt CoordinatorLayout bên trong RelativeLayout chỉ để thực hiện trung tâm thanh tiến trình. 'Layout_gravity' thực hiện tốt. Những gì tôi có nghĩa là thanh tiến trình đang ở trong tập tin xml KHÁC, trong trường hợp đó nó đã không thể đặt nó ở trung tâm. –

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