在所有活动中实施Android NavDrawer

时间:2018-11-30 16:03:57

标签: android layout navigation

我已经在Android Studio中创建了一个Activity,并选择了Navigation Drawer布局。然后,Android创建了一个自动导航布局,该布局具有一个抽屉,抽屉可以拉出,并为我提供了导航选项。

我已经编辑了所有选项以适合我的导航,还编辑了图像。我已经对Intent进行了完整的编码,单击相应的选项后,它将带用户进行正确的活动。

我对此很陌生,我想知道,对我所有活动而言,实现相同导航布局的最佳方法是什么?我已经阅读了有关“基础活动”的信息,但是我不想指定自己的布局,因为我觉得这台Android正是我所期待的。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我知道有两种创建可从应用程序每个屏幕访问的导航抽屉的方法。

  1. 重要的一点是,您不必为用户在应用程序中可能看到的每个屏幕都创建单独的活动。如果您只想更改屏幕的“内容”,但保持相同的基本工具栏,导航抽屉和周围的“框架”布局,通常最好使用fragment来代替(更有效)。这样,您几乎可以执行与单独的“活动”相同的所有操作,但是打开应用程序后,只需创建一次“导航抽屉”即可。 Google现在建议以这种方式构建应用程序(如您在this post中看到的那样),因为与其他活动相比,它们在屏幕之间共享数据更好/更灵活...

  2. 如果您真的想坚持使用同一抽屉创建多个活动,则应为抽屉创建一个单独的方法和布局文件,然后在创建的所有活动中实施它们。这是一个通用示例(使用的视图/ id /属性实际上不存在,它们只是在进行演示-用您在应用程序中使用的任何内容替换它们):

    a。编写一个单独的布局文件,其中包含导航抽屉的内容...

    [res / layout / layout_drawer.xml]

    <DrawerViewSomethingIdk
        android:layout_height="match_parent"
        android:layout_width="250dp">
    
        <DrawerItemThing
            android:id="@+id/drawerItemId"
            android:layout_height="24dp"
            android:layout_width="match_parent"
            android:text="This is a drawer item." />
    
    </DrawerViewSomethingIdk>
    

    b。使用<include>标签将布局添加到您创建的每个活动布局中; here中提供了有关如何使用此标签的更具体的说明。

    <RootLayoutView
        android:layout_height="match_parent"
        android:layout_width="match_parent">
    
        <include layout="@layout/layout_drawer"/>
    
        <!-- everything else in your activity -->
    
    </RootLayoutView>
    

    c。编写一个 static 方法,将抽屉中的视图绑定到您希望它们启动的每个Intent

    [NavigationDrawerUtils.java]

    public static method bindIntents(Activity activity) {
        DrawerItemThing aDrawerItemView = activity.findViewById(R.id.drawerItemId);
        aDrawerItemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // start the activity
            }
        });
    
        // ... and so on for every drawer item you create
    } 
    
    d。在布局文件膨胀之后,在每个活动中调用该方法。

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1_layout);
        NavigationDrawerUtils.bindIntents(this);
    }
    

选项2将起作用,但是其用例有限。我强烈建议您查看片段(选项1),因为用不必要的活动填充您的应用程序只会导致整个项目中多次重复使用相同的代码,并且难以维护。