2016-09-08 22 views
8

Tôi có các Nút Hành động Nổi trong hai bố cục Phân đoạn của tôi và đôi khi chúng di chuyển đến vị trí sai, tôi sử dụng CoordinatorLayout.Android: Nút Hành động Nổi ở vị trí sai

This is how it should look

This is how it somtetimes look when i open the Fragment

Đây là mã của đoạn tôi:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<LinearLayout android:id="@+id/notes_layout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".fragments.NotesFragment"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/notes_recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/new_note_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="16dp" 
    android:clickable="true" 
    android:src="@drawable/ic_add_black_48dp" 
    app:layout_anchor="@id/notes_layout" 
    app:layout_anchorGravity="bottom|center" 
    android:onClick="openNewNote"/> 

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

Có ai có một ý tưởng tại sao FAB đôi khi di chuyển đến vị trí sai?

+0

theo xml của bạn có quan điểm tái chế nhưng ảnh chụp màn hình cho thấy TextView? –

+0

@Sangram textview là ViewHolder. Nó được hiển thị khi khung nhìn của người tái chế trống. – Cimoe

+0

bạn cũng có thể đặt trọng lực theo chương trình sang FAB.kiểm tra câu trả lời của tôi. –

Trả lời

6

Tôi đã gặp sự cố tương tự. Vấn đề là với sự kết hợp của ứng dụng: layout_anchor và com.android.support.design:24.2.0+

Tôi có thể khắc phục sự cố này bằng cách xóa ứng dụng: thuộc tính layout_anchor khỏi fab hoặc bằng cách hoàn nguyên về phiên bản cũ của thư viện thiết kế. 24.1.1 đã làm việc tốt cho tôi. Tôi cũng phải hoàn nguyên thư viện ứng dụng v7 appcompat của mình thành 24.1.1.

Tôi hy vọng điều này sẽ hữu ích.

+0

Tôi có thể xác nhận cùng một vấn đề, tôi đã có thể giải quyết bằng cách xóa ứng dụng: layout_anchor – gpiazzese

2

Lớp CoordinatorLayout.LayoutParams có trường anchorGravity cho điều đó. Ví dụ:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams(); 
lp.anchorGravity = Gravity.BOTTOM | GravityCompat.START; 
fab.setLayoutParams(lp); 
+0

Cảm ơn ý tưởng, nhưng nó vẫn không hoạt động .Các fab vẫn di chuyển ngẫu nhiên đến vị trí sai – Cimoe

1

Trong trường hợp của tôi, đây là lỗi trong thư viện hỗ trợ từ 24.2.0 trở lên. Vì vậy, cách duy nhất để giải quyết vấn đề này là xây dựng ứng dụng với hỗ trợ lib v24.1.1.

1
try this: 
<android.support.design.widget.CoordinatorLayout 
     android:id="@+id/main_content" 
     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.v7.widget.RecyclerView 
     android:id="@+id/rvToDoList" 
     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="@mipmap/ic_launcher" 
     app:layout_anchor="@id/rvToDoList" 
     app:layout_anchorGravity="bottom|right|end"/> 
</android.support.design.widget.CoordinatorLayout> 
6

Cố gắng làm cho FAB đứa con đầu lòng của CoordinatorLayout

+0

Tôi có bố cục rất giống và di chuyển FAB là đứa trẻ đầu tiên không thể, cách thuộc tính layout_anchor có hoạt động như bây giờ trước LinearLayout không? – Phil

+0

layout_anchor sẽ hoạt động tốt, cho dù ở trên hay dưới chế độ xem neo. Hạn chế duy nhất là phụ huynh của chế độ xem có thuộc tính layout_anchor phải là CoordinatorLayout –

+0

vì một số lý do kỳ lạ hoạt động! – Jelle

0

Không ai trong số các đề xuất này đã kết thúc làm việc cho tôi (hạ cấp không phải là một lựa chọn; di chuyển FAB lên vì vậy nó là đứa con đầu lòng làm cho nó vô hình trên Android 14; loại bỏ layout_anchor làm cho nó nhảy đến một vị trí ngẫu nhiên mọi lúc)

Tôi thay vì sử dụng ConstraintLayout để định vị FAB theo cách thủ công giữa hai chế độ xem mà tôi muốn. Vì toàn bộ màn hình của tôi không có khu vực cuộn, nó hoạt động tốt.

Để định vị FAB theo cách này, hãy đặt cả ràng buộc trên và dưới xuống dưới cùng của một khung nhìn phía trên nó phải chồng lên nhau và đảm bảo nó là con cuối cùng trong ConstraintLayout.

0

Đặt FAB bên trong một RelativeLayout, nó làm việc cho tôi, tôi đang sử dụng phiên bản 25.3.1 của thư viện hỗ trợ

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