2016-12-24 2 views
1

У меня есть эта странная проблема: когда я заменяю фрагмент и возвращаюсь к нему, используя задний стек, FAB иногда отображается в верхнем левом углу экрана, когда я привязываю его к нижней | конец. Он идеально закреплен на дне | конец, только что загруженный из активности. Как я могу это решить? Заранее спасибо.Изменение привязки Android FAB при замене фрагментов

Редактировать Есть 50% шанс, что он правильно закреплен, а 50% - нет.

Я попытался вручную установить гравитацию FAB в код Java, используя это, но все же не работает.

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

Вот мой код FAB

<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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.berstek.gradius.fragments.RecordsFragment"> 

    <!-- TODO: Update blank fragment layout --> 
    <LinearLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

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

    </LinearLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_add_white" 
     app:layout_anchor="@id/container" 
     app:layout_anchorGravity="bottom|end" /> 

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

Hi. Вы нашли решение для этого? – aleksandrbel

ответ

0

я в конечном итоге, используя Framelayout вместо и он показывает просто отлично. Но если кто-нибудь знает, почему у КоординатораLayout есть эта странная проблема, я бы с удовольствием это услышал.

Вот мой код.

<FrameLayout 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:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/white" 
android:foreground="?android:attr/selectableItemBackground" 
android:orientation="vertical" 

tools:context="com.berstek.gradius.fragments.RecordsFragment"> 

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

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="10dp" 
    android:clickable="true" 
    android:src="@drawable/ic_add_white" 
    app:backgroundTint="@color/colorAccent" 
    app:layout_anchorGravity="bottom|end" /> 

1

Одно решение, которое работает для меня это вызов RequestLayout вашего зрения (тот, который имеет кнопку Floating действие) в OnResume:

@Override 
public void onResume() { 
    super.onResume(); 

    getView().post(new Runnable() { 
     @Override 
     public void run() { 
      getView().requestLayout(); 
     }); 
} 

На Xamarin Android:

public override void OnResume() 
{ 
    base.OnResume(); 

    this.View.Post(() => this.View.RequestLayout()); 
} 

Надеюсь, это поможет.

0

Я добавил только одну строку к КоординаторLayout и проблема исчезла.

android:fitsSystemWindows="true" 

Так что можно сделать вывод о том, что иногда раскладка координатор не на весь экран, и чем это проступок приходит.

Это полный код моего макета.

<?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:fitsSystemWindows="true" 
    > 

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

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

</android.support.design.widget.CoordinatorLayout> 
Смежные вопросы