在 Android 中创建滑动抽屉界面

SlidingRootNav 是一个易于使用的替代方案,适合老式 Android SlidingDrawer 界面的粉丝。
201 位读者喜欢这篇文章。
tux and android stuffed animals on shelf

Quinn Dombrowski 通过 Flickr 提供。CC BY-SA 2.0

使用 Android SlidingDrawer 库的应用程序允许用户将内容隐藏在屏幕外,然后在他们想使用时使用“句柄”将其拖到屏幕上。不幸的是,该库在 Android 4.2 JellyBean (API 17) 中已被弃用,但独立开发者已介入创建替代版本,以满足那些怀念其炫酷动画和更好 UI 体验的人。

在本教程中,我们将使用 SlidingRootNav 创建滑动抽屉界面,这是一种非常容易实现的开源替代方案。

下面显示的代码适用于最新版本的 Android (API 28)。它是使用 Android Studio IDE 和 Android Gradle 构建工具创建的(但也可以使用 Eclipse 和其他 IDE 完成)。在开始这个项目之前,请务必查看您的 IDE。

SlidingRootNav example animation

基本实现

首先,在 Gradle 中应用程序的 dependencies 块中添加以下内容

compile 'com.yarolegovich:sliding-root-nav:1.1.0'

请确保在应用程序的 Gradle 中将 minSdkVersion 设置为 16,因为这是此库工作的最低 SDK。

这是一个非常简单的实现。 从文档中可以清楚地看到,我们需要两个 XML 布局。

一个是 sliding_layout.xml(我从 Git 示例代码中获取的)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary" />
    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

另一个是 drawer_menu.xml,它保存我们应用程序的菜单栏

<code>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#008821"
    android:orientation="vertical">

    <Space
        android:layout_width="wrap_content"
        android:layout_height="90dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="24dp"
        android:paddingRight="24dp"
        android:paddingStart="24dp"
        android:text="Some Text 0"
        android:textSize="12sp" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:orientation="horizontal"
        android:paddingLeft="24dp"
        android:paddingRight="24dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="6dp"
            android:text="Some Text1" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Main Text"
            android:textStyle="bold"
            android:textSize="34sp" />

    </LinearLayout>

    <Space
        android:layout_width="wrap_content"
        android:layout_height="56dp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="240dp"
        android:layout_height="wrap_content" />

    <Space
        android:layout_width="wrap_content"
        android:layout_height="40dp" />

</LinearLayout>

根据 Git 示例,我们所要做的就是使用 SlidingRootNavBuilder 对象将两个布局缝合在一起。

为此,请将其添加到您的 Activity 中

new SlidingRootNavBuilder(this)
  .withMenuLayout(R.layout.menu_left_drawer)
  .inject();

Git 示例指定了一些额外的属性/回调。 它们由下面的实现保存,我将其命名为 ContentSlider.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toolbar;
import com.yarolegovich.slidingrootnav.SlidingRootNavBuilder;

public class ContentSlider extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sliding_layout);
         new SlidingRootNavBuilder(this)
                .withMenuOpened(false)
                .withContentClickableWhenMenuOpened(false)
                .withSavedState(savedInstanceState)
                .withMenuLayout(R.layout.drawer_menu)
                .inject();
    }
}

现在是检查一切结果如何的时候了! 在您的 Android 虚拟设备 (AVD) 中运行您的应用程序。

ContentSlider animation

我认为这是一种非常酷的动画内容滑块的方式,并且我喜欢它实现的简单性。 访问 SlidingRootNav 存储库 并亲自尝试一下!

标签
User profile image.
Androidmonks.com 的创始人/博主,这是一个提供与 Android 相关的免费内容的开源博客/网站。 如果您曾经想学习 Android。 也是一个时间旅行者/博主。

1 条评论

抽屉作为 UI 花招? 让人想起 Amiga! 由于某种原因,他们使用抽屉而不是文件夹作为目录的隐喻。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.