使用 Android SlidingDrawer 库的应用程序允许用户将内容隐藏在屏幕外,然后在他们想使用时使用“句柄”将其拖到屏幕上。不幸的是,该库在 Android 4.2 JellyBean (API 17) 中已被弃用,但独立开发者已介入创建替代版本,以满足那些怀念其炫酷动画和更好 UI 体验的人。
在本教程中,我们将使用 SlidingRootNav 创建滑动抽屉界面,这是一种非常容易实现的开源替代方案。
下面显示的代码适用于最新版本的 Android (API 28)。它是使用 Android Studio IDE 和 Android Gradle 构建工具创建的(但也可以使用 Eclipse 和其他 IDE 完成)。在开始这个项目之前,请务必查看您的 IDE。

基本实现
首先,在 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) 中运行您的应用程序。

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