首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >像Gmail应用一样的Android导航抽屉

像Gmail应用一样的Android导航抽屉
EN

Stack Overflow用户
提问于 2016-01-13 14:00:04
回答 4查看 28.4K关注 0票数 14

我们正在开发一个android应用程序,我们还想添加一些东西。这就是Gmail应用程序的效果。

您可以选择要查看的帐户(应用程序的其余部分将相应地操作)。

编辑:

我现在已经有了一个(工作的)导航栏,但是我想要的是标题中的圆形图标。我希望有人能够选择他们正在查看的用户。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-13 14:02:12

您想要的效果可以通过使用来自NavigationView支持库的com.android.support:design来实现。

您可以找到关于该这里的完整教程。您可以从教程这里下载完整的源代码。

还有你可以跟踪的这是另一个很好的教程

但是长话短说,这个视图被分成两个主要部分,一个标题和一个菜单部分,以及您必须在XML上定义的每个部分。

从那篇教程看:

头视图 这个视图基本上是导航抽屉的顶部,它保存了配置文件图片、姓名和电子邮件等。您需要在一个单独的布局文件中定义这一点--我们将在稍后查看这个文件。 菜单 这是您想要显示在标题下面的菜单,我们在“菜单”文件夹中定义菜单,就像您为溢出菜单定义菜单一样。因此,基本上,NavigationView是一个容器的标题,视图和菜单,您将使用在您的滑动抽屉。因此,既然您了解了NavigationView,我们就可以开始构建导航抽屉了。

考虑到这一点,就像构建任何其他布局一样构建您的标题。菜单的定义有点类似于Toolbar/ActionBar菜单。例如:

navigation_menu.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group
        android:checkableBehavior="single">

        <item
            android:id="@+id/drawer_home"
            android:checked="true"
            android:icon="@drawable/icon_home"
            android:title="@string/title_home"/>

        <item
            android:id="@+id/drawer_content"
            android:icon="@drawable/icon_content"
            android:title="@string/title_content"/>

        <item
            android:id="@+id/drawer_about"
            android:icon="@drawable/icon_about"
            android:title="@string/title_about"/>

        <item
            android:id="@+id/drawer_exit"
            android:icon="@drawable/icon_exit"
            android:title="@string/title_exit"/>

        </group>
</menu>

然后,在您的Activity上,您只需使用DrawerLayoutNavigationView创建一个类似于本教程中的布局。

代码语言:javascript
复制
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">
 
    <LinearLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="vertical"
        >
        <include
            android:id="@+id/toolbar"
            layout="@layout/tool_bar"/>
        <FrameLayout
            android:id="@+id/frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
 
        </FrameLayout>
 
    </LinearLayout>
 
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        app:headerLayout="@layout/header"
        app:menu="@menu/navigation_menu"/>
</android.support.v4.widget.DrawerLayout>

您还必须为要用这个Fragments显示的每个屏幕创建一些NavigationView。在这样做之后,您可以在Activity上通过实现NavigationView.OnNavigationItemSelectedListener来处理选择事件,如下所示:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 
    // Your Activity
        @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {
        Fragment fragment = null;

        switch(menuItem.getItemId()) {
            case R.id.drawer_home:
                fragment = new YourFragment();
                break;
            case R.id.drawer_content:
                fragment = new AnotherFragment();
                break;
            case R.id.drawer_about:
                fragment = new AboutFragment();
                break;
            case R.id.drawer_exit:
                // TODO - Prompt to exit.
                finish();
                break;
        }

        if (fragment == null) {
            fragment = new YourFragment();
        }

        drawerLayout.closeDrawers();

        FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame, fragment)
                    .commit();

        return true;
    }
}

至于您的编辑,图标可以用ImageView表示。要在多个配置文件之间导航,这取决于您如何在应用程序上实现该逻辑,但作为一个“通用”答案,您可以使用类似于Spinner的工具切换这些配置文件。

这些教程将帮助您完成这一步:

一旦在上设置了这个选项,就可以处理项选择,并相应地更改用户配置文件。(最后一部分完全取决于您如何在应用程序上实现用户配置文件)。但是,作为一个先导,您可以检查android培训网站,更具体地说,这部分

票数 27
EN

Stack Overflow用户

发布于 2016-01-13 14:03:31

你应该使用NavigationView

它提供了一个易于实现的框架,通过菜单资源膨胀导航项,实现了物料导航抽屉。在导航视图之前,我们很难用自定义适配器使用列表视图或线性布局来制作实体导航抽屉,但是现在我们只需要在DrawerLayout中添加导航视图,其他一切都将由导航视图处理。

代码语言:javascript
复制
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:fitsSystemWindows="true">

     <!-- Your contents -->

     <android.support.design.widget.NavigationView
         android:id="@+id/navigation"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"
         app:menu="@menu/my_navigation_items" />
 </android.support.v4.widget.DrawerLayout>

对于此要求,您可以检查示例。

  1. MaterialDrawer
  2. 如何制作材料设计导航抽屉
  3. 玩NavigationView

希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2016-09-01 18:02:07

我想这个MaterialDrawer就是你要找的。这个图书馆有很多例子。您可以直接使用这个库,也可以读取源代码并实现您自己的抽屉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34768647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档