交换片段时Android FAB锚点会发生变化

时间:2016-12-24 18:55:04

标签: android

我有这个奇怪的问题,当我更换片段并使用后栈返回时,FAB有时会显示在屏幕的左上角,当我将其锚定到底部时结束。它完美地固定在底部刚从活动中加载时结束。我怎么解决这个问题?提前谢谢。

编辑 它有50%的几率正确锚定,50%不可能。

我尝试使用此方法在java代码中手动设置FAB的重力,但仍无效。

str(f) => '123456789.12345679'

这是我的FAB代码

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

3 个答案:

答案 0 :(得分:1)

对我有用的一个解决方案是在OnResume中调用视图的RequestLayout(具有浮动操作按钮的那个):

@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());
}

希望它有所帮助。

答案 1 :(得分:1)

我只在 CoordinatorLayout 中添加了一个字符串,问题就消失了。

select x.id,b.games,b.name from (
select id,count(id) as Total from person

group by id
having count(id) > 1
) x
inner join person b on x.id = b.id

所以我可以得出结论,有时协调器布局不是全屏,而是出现了这种不当行为。

这是我的布局的完整代码。

android:fitsSystemWindows="true"

答案 2 :(得分:0)

我最终使用的是Framelayout而且它显示得很好。但如果有人知道为什么CoordinatorLayout有这个奇怪的问题,我很乐意听到它。

这是我的代码。

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