使用底部深层链接打开活动或片段

dej*_*jix 21 android

我想打开一个底部工作表(深层链接方式),但在它内部而不是共享选项或只是一个布局我希望有一个活动与其布局或片段及其布局.

打开Bottom Sheet Like Flipboard/BottomSheet的已知库可以打开布局而不是整个活动.

有没有可能通过协调员布局实现这一目标?

我在底部组件页面上找到了Google的照片,它显示了我的确切想法.谷歌的描述说:

右侧的应用程序显示一个底部工作表,其中包含左侧应用程序的内容.这允许用户在不离开当前应用的情况下查看来自其他应用的内容.

在此输入图像描述

Ale*_*lli 2

我不是专家,但经过一些研究,我找到了一种简单的方法来做到这一点。首先activity_main.xml,确保您的根布局是android.support.design.widget.CoordinatorLayout.

就在其中CoodrdinatorLayout添加一个包含到您的底部工作表布局中:

<include layout="@layout/bottom_sheet_main" />
Run Code Online (Sandbox Code Playgroud)

然后,这可能是最重要的步骤,您需要指定底部工作表布局的行为,因此这里是示例代码:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottomSheet"
android:layout_width="match_parent"
android:layout_height="300dp"
android:orientation="vertical"
android:background="#FFFFFF"
app:layout_behavior="@string/bottom_sheet_behavior"
app:behavior_hideable="true"
app:behavior_peekHeight="64dp" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Title"
        android:padding="16dp"
        android:text="BOTTOM SHEET" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
        android:padding="16dp"
        android:text="Here goes text" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

好的,这就是所有 XML 代码。请注意,我们应用了 anapp:layout_behavior以便它具有我们想要的属性。另一件重要的事情是指定app:behavior_hideable="true"我们是否想要隐藏整个布局的选项。该属性app:behavior_peekHeight="64dp"意味着视图折叠(但不隐藏)时的高度为 64dp。该视图有 3 个主要阶段:

  • 展开 ( STATE_EXPANDED):当底页完全打开时。

  • 折叠 ( STATE_COLLAPSED):当用户从视图顶部只能看到一小部分时。该属性app:behavior_peekHeight决定了这个高度。

  • Hidden( STATE_HIDDEN):当它完全隐藏时(惊喜哈哈!)。

我们也有STATE_SETTLING和 ,STATE_DRAGGING它们是暂时的,但它们并不那么重要。现在,如果您运行您的应用程序(您不必编写任何 JAVA 代码),您将看到,如果您向上滑动布局底部出现的标题,工作表将展开,在其他中也是如此方式。

但您可能会注意到,如果单击底部工作表,则不会发生任何情况。您可以使用一些 Java 代码来管理底部工作表的状态:

声明视图:LinearLayout bottomSheet = (LinearLayout)findViewById(R.id.bottomSheet);

声明行为“经理”:

final BottomSheetBehavior bsb = BottomSheetBehavior.from(bottomSheet);

然后你可以获得状态变化:

bsb.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {

    String strNewState = "";

    switch(newState) {
        case BottomSheetBehavior.STATE_COLLAPSED:
            strNewState = "STATE_COLLAPSED";
            break;
        case BottomSheetBehavior.STATE_EXPANDED:
            strNewState = "STATE_EXPANDED";
            break;
        case BottomSheetBehavior.STATE_HIDDEN:
            strNewState = "STATE_HIDDEN";
            break;
        case BottomSheetBehavior.STATE_DRAGGING:
            strNewState = "STATE_DRAGGING";
            break;
        case BottomSheetBehavior.STATE_SETTLING:
            strNewState = "STATE_SETTLING";
            break;
    }

    Log.i("BottomSheets", "New state: " + strNewState);
}

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
    Log.i("BottomSheets", "Offset: " + slideOffset);
}});
Run Code Online (Sandbox Code Playgroud)

就是这样!

您还可以使用模态底部表,它可以让您像片段一样创建底部表。