浮动按钮和底部片段

时间:2018-01-31 13:27:27

标签: android android-fragments maps floating-action-button bottom-sheet

我正在努力设置一个基于底部片段位置的上下移动的浮动按钮。 我想要谷歌地图做的事情,无论是移动底部工作表,浮动按钮也是一起移动。

FloatingButton is moving fine

此时这就是我的活动

The FloatingButton is not moving at all

我有一个活动可以在片段中加载地图,比如

<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"
    tools:context="br.com.vix.v1motorista.MotoristaActivity">

<!-- here the map is loaded -->
<FrameLayout
    android:id="@+id/conteudo"
    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="@dimen/fab_margin"
    android:layout_marginBottom="16dp"
    android:visibility="visible"
    app:layout_anchor="@+id/conteudo"
    app:layout_anchorGravity="right|bottom"
    app:srcCompat="@drawable/ic_info_white_36dp" />

<!-- Adding bottom sheet after main content -->
<include android:id="@+id/pickUpFragment" layout="@layout/fragment_pax_pick_up_2" />

我已经尝试将FloatingButton移动到Bottom Sheet Fragment xml文件,它几乎可以工作,但如果我关闭片段,浮动按钮将与底部片段一起消失,并且当浮动按钮没有完全显示时底页是“隐藏的”。

3 个答案:

答案 0 :(得分:1)

您应该在“ android:id =“ @ + id / conteudo”” FrameLayout中添加另外两个属性:

  • app:layout_insetEdge =“ bottom”
  • app:layout_behavior =“ android.support.design.widget.BottomSheetBehavior”

然后在FAB中使用app:layout_dodgeInsetEdges =“ bottom”:

// give you current execution direcory 
String currentDir = System.getProperty("user.dir");
String fileName = currentDir+File.separator+"src"+File.separator+"test"+File.separator
+"resources"+File.separator+"excel"+File.separator+"hello.xlsx"

// File.separator this will works for ubuntu,windows and Mac.

答案 1 :(得分:0)

你可以这样做 -
在xml的片段中 线性布局(具有透明的bg,可点击的假,方向verticale)
| - 浮动按钮(底部边距8dp)
| - 您的主要LinearLayout / RelativeLayout / FrameLayout
| - 子布局

现在计算浮动按钮的高度
设置底部的peekHeight =浮动按钮的高度+ 8dp

现在崩溃时,您的主要布局将被隐藏,但您的浮动按钮将保持可见。始终折叠你的底页不要隐藏。

如果您想展示主要布局的某些部分而不是崩溃 设置底层的peekHeight =浮动按钮的高度+该部分的高度+ 8dp

答案 2 :(得分:0)

这并不是您想要的。但是以此为基础,您可以根据需要创建自定义行为。因此,这两个组件都将适用于所提供的行为。

创建协调器布局的自定义上移行为,如下所示:

public class CustomMoveUpBehavior extends CoordinatorLayout.Behavior {

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
        return dependency instanceof Snackbar.SnackbarLayout; //here you can use bottom Sheet fragment in your case
    }

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
        float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
        child.setTranslationY(translationY);
        return true;
    }

}

将浮动按钮更改为某个自定义视图,并将此行为添加为默认行为 像这样:

//it may extend floating Action button in your case
@CoordinatorLayout.DefaultBehavior(CustomMoveUpBehavior.class)
public class CustomButton extends AppCompatButton {
    public CustomButton(Context context) {
        super(context);
    }

    public CustomButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}