android - 使用底部表深层链接打开 Activity 或 fragment

标签 android

我想打开一个底部工作表(深度链接方式),但在它内部而不是共享选项或只是一个布局,我想要一个带有布局的 Activity 或一个带有布局的 fragment 。

打开底页的已知库如 Flipboard/BottomSheet可以打开布局,而不是整个 Activity 。

有没有可能通过协调器布局来实现?

我在 Bottom Sheet Component Page 上找到了一张 Google 的照片这显示了我的想法。谷歌的描述说:

The app on the right displays a bottom sheet containing content from the app on the left. This allows the user to view content from another app without leaving their current app.

enter image description here

最佳答案

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

就在 CoodrdinatorLayout 内部,将包含添加到您的底部工作表布局中:

<include layout="@layout/bottom_sheet_main" />

然后,这可能是最重要的一步,您需要指定 Bottom Sheet 布局的行为,所以这里有一个示例代码:

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

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

  • 展开(STATE_EXPANDED):当底部工作表完全打开时。

  • Collapsed (STATE_COLLAPSED):当用户只看到 View 顶部的一小部分时。 app:behavior_peekHeight 属性决定了这个高度。

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

我们还有 STATE_SETTLINGSTATE_DRAGGING,它们是暂时的,但它们并不那么重要。 现在,如果您运行您的应用程序(您不必编写任何 JAVA 代码),您将看到如果您向上滑动将出现在布局底部的标题,工作表将展开,另一个相同方式。

但是您可能会注意到,如果您单击底部工作表,则没有任何反应。您可以使用一些 Java 代码来管理 Bottom Sheet 的状态:

声明 View :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);
}});

它就在那里!

您还可以使用模态底部表,它可以让您创建一个底部表,就像它是一个 fragment 一样。

关于android - 使用底部表深层链接打开 Activity 或 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34243928/

相关文章:

android - 单击硬件设置按钮时应用程序崩溃

android - EditText 上的事件

Android 应用内购买,防止盗版

java - 我如何在下面的上下文中干燥我的代码(android)

android - 在 Android 的 MediaRecorder 中包含音频

java - Android 未检测到使用短信监听器发送的短信

java - 锁屏上的透明对话框可回复 Whatsapp 等消息

android - 应用内结算 android 的官方国家列表?

android - 评分栏未显示所有星星

java - Android MediaPlayer 不播放