博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 导航抽屉_Android导航抽屉示例教程
阅读量:2548 次
发布时间:2019-05-11

本文共 11123 字,大约阅读时间需要 37 分钟。

android 导航抽屉

In this tutorial we’ll implement a Navigation Drawer in our android application. Android navigation drawer is a sliding menu and it’s an important UI component. You will see navigation drawer in most of the android applications, it’s like navigation menu bars in the websites.

在本教程中,我们将在我们的android应用程序中实现一个导航抽屉 。 Android导航抽屉是一个滑动菜单,它是重要的UI组件。 您会在大多数android应用程序中看到导航抽屉,就像网站中的导航菜单栏一样。

Android导航抽屉 (Android Navigation Drawer)

Android Navigation Drawer is a sliding left menu that is used to display the important links in the application. Navigation drawer makes it easy to navigate to and fro between those links. It’s not visible by default and it needs to opened either by sliding from left or clicking its icon in the ActionBar.

Android导航抽屉是一个向左滑动菜单,用于显示应用程序中的重要链接。 导航抽屉可轻松在这些链接之间来回导航。 默认情况下它是不可见的,需要通过向左滑动或在ActionBar中单击其图标来打开它。

In broader terms, Navigation Drawer is an overlay panel, which is a replacement of an activity screen which was specifically dedicated to show all the options and links in the application.

从广义上讲,“导航抽屉”是一个覆盖面板,替代了专门用于显示应用程序中所有选项和链接的活动屏幕。

In this android navigation drawer tutorial we’ll implement the navigation drawer using the Drawer Layout API present in Android Support Library. We’ll show 3 fragment views that can be opened from the drawer items.

在此android导航抽屉教程中,我们将使用Android支持库中提供的Drawer Layout API来实现导航抽屉。 我们将显示3个可以从抽屉项目中打开的片段视图。

Android导航抽屉项目结构 (Android Navigation Drawer Project Structure)

Android导航抽屉示例 (Android Navigation Drawer Example)

To implement the Navigation Drawer we first need to add android.support.v4.widget.DrawerLayout as the root of the activity layout as shown below.

要实现导航抽屉,我们首先需要添加android.support.v4.widget.DrawerLayout作为活动布局的根,如下所示。

activity_main.xml

activity_main.xml

The menu options in the navigation drawer are stored in the form of a ListView. Each option opens in the FrameLayout.

导航抽屉中的菜单选项以ListView的形式存储。 每个选项在FrameLayout中打开。

We’ve used a ToolBar in place of an here. ToolBar has been introduced since Android 5.0 as a generalisation of ActionBar. It gives us more control and flexibility to modify and its easier to interleave with other views in the hierarchy.

我们在这里使用了ToolBar代替了 。 从Android 5.0开始,ToolBar作为ActionBar的泛化引入。 它为我们提供了更多的控制权和修改的灵活性,并使其更易于与层次结构中的其他视图进行交错。

The layout ToolBar is defined in the xml layout given below.

布局工具栏在下面给出的xml布局中定义。

toolbar.xml

toolbar.xml

We need to use the Theme Theme.AppCompat.NoActionBar in the styles.xml when using Toolbars.

使用工具栏时,我们需要在styles.xml中使用主题Theme.AppCompat.NoActionBar

The layout for the ListView rows in the Navigation Drawer is given below.

下面给出了导航抽屉中ListView行的布局。

list_view_item_row.xml

list_view_item_row.xml

The navigation drawer items are put in a string array in the strings.xml file as shown below.

导航抽屉项目放置在strings.xml文件中的字符串数组中,如下所示。

strings.xml

strings.xml

Connect
Fixtures
Table

The DataModel.java class is used to define the objects for the drawer list items.

DataModel.java类用于定义抽屉式列表项的对象。

DataModel.java

DataModel.java

package com.journaldev.navigationdrawer;public class DataModel {    public int icon;    public String name;    // Constructor.    public DataModel(int icon, String name) {        this.icon = icon;        this.name = name;    }}

The drawer items are stored in the form of a ListView. Hence we need to use an Adapter Class to provide that data to the activity class.

抽屉项目以ListView的形式存储。 因此,我们需要使用适配器类将数据提供给活动类。

DrawerItemCustomAdapter.java

DrawerItemCustomAdapter.java

package com.journaldev.navigationdrawer;import android.app.Activity;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class DrawerItemCustomAdapter extends ArrayAdapter
{ Context mContext; int layoutResourceId; DataModel data[] = null; public DrawerItemCustomAdapter(Context mContext, int layoutResourceId, DataModel[] data) { super(mContext, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.mContext = mContext; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { View listItem = convertView; LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); listItem = inflater.inflate(layoutResourceId, parent, false); ImageView imageViewIcon = (ImageView) listItem.findViewById(R.id.imageViewIcon); TextView textViewName = (TextView) listItem.findViewById(R.id.textViewName); DataModel folder = data[position]; imageViewIcon.setImageResource(folder.icon); textViewName.setText(folder.name); return listItem; }}

The MainActivity.java source code is given below.

MainActivity.java源代码如下。

MainActivity.java

MainActivity.java

package com.journaldev.navigationdrawer;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.widget.DrawerLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;public class MainActivity extends AppCompatActivity {    private String[] mNavigationDrawerItemTitles;    private DrawerLayout mDrawerLayout;    private ListView mDrawerList;    Toolbar toolbar;    private CharSequence mDrawerTitle;    private CharSequence mTitle;    android.support.v7.app.ActionBarDrawerToggle mDrawerToggle;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTitle = mDrawerTitle = getTitle();        mNavigationDrawerItemTitles= getResources().getStringArray(R.array.navigation_drawer_items_array);        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);        mDrawerList = (ListView) findViewById(R.id.left_drawer);        setupToolbar();        DataModel[] drawerItem = new DataModel[3];        drawerItem[0] = new DataModel(R.drawable.connect, "Connect");        drawerItem[1] = new DataModel(R.drawable.fixtures, "Fixtures");        drawerItem[2] = new DataModel(R.drawable.table, "Table");        getSupportActionBar().setDisplayHomeAsUpEnabled(false);        getSupportActionBar().setHomeButtonEnabled(true);        DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.list_view_item_row, drawerItem);        mDrawerList.setAdapter(adapter);        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);        mDrawerLayout.setDrawerListener(mDrawerToggle);        setupDrawerToggle();    }    private class DrawerItemClickListener implements ListView.OnItemClickListener {        @Override        public void onItemClick(AdapterView
parent, View view, int position, long id) { selectItem(position); } } private void selectItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new ConnectFragment(); break; case 1: fragment = new FixturesFragment(); break; case 2: fragment = new TableFragment(); break; default: break; } if (fragment != null) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); setTitle(mNavigationDrawerItemTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { Log.e("MainActivity", "Error in creating fragment"); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } @Override public void setTitle(CharSequence title) { mTitle = title; getSupportActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } void setupToolbar(){ toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowHomeEnabled(true); } void setupDrawerToggle(){ mDrawerToggle = new android.support.v7.app.ActionBarDrawerToggle(this,mDrawerLayout,toolbar,R.string.app_name, R.string.app_name); //This is necessary to change the icon of the Drawer Toggle upon state change. mDrawerToggle.syncState(); }}

In the above code getSupportActionBar().setDisplayHomeAsUpEnabled(false); is used to hide the default back button.

在上面的代码中, getSupportActionBar().setDisplayHomeAsUpEnabled(false); 用于隐藏默认的后退按钮。

In this code we’ve used a DrawerItemClickListener Class that loads the respective fragment of the list item clicked using a FragmentManager. Also the the title of the ToolBar is changed to the list item clicked using setTitle(mNavigationDrawerItemTitles[position]);.

在此代码中,我们使用了DrawerItemClickListener类, DrawerItemClickListener加载使用FragmentManager单击的列表项的相应片段。 同样,将工具栏的标题更改为使用setTitle(mNavigationDrawerItemTitles[position]);单击的列表项setTitle(mNavigationDrawerItemTitles[position]);

The fragment classes and their respective layouts are given below.

片段类及其各自的布局如下。

ConnectFragment.java

ConnectFragment.java

package com.journaldev.navigationdrawer;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class ConnectFragment extends Fragment {    public ConnectFragment() {    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View rootView = inflater.inflate(R.layout.fragment_connect, container, false);        return rootView;    }}

The layout of the above fragment is defined below.

以上片段的布局定义如下。

fragment_connect.xml

fragment_connect.xml

The other two items are defined in exactly the same way as above hence we’re skipping it here.

其他两个项目的定义与上面完全相同,因此我们在这里跳过。

导航抽屉Android示例输出 (Navigation Drawer Android Example Output)

Below is the output produced by our navigation drawer android example application.

以下是我们的导航抽屉android示例应用程序产生的输出。

This brings an end to android navigation drawer example tutorial. You can download the final Android Navigation Drawer Project from the below link.

这结束了android导航抽屉示例教程。 您可以从下面的链接下载最终的Android导航抽屉项目

翻译自:

android 导航抽屉

转载地址:http://yhmzd.baihongyu.com/

你可能感兴趣的文章
Composite UI Application Block (CAB) 概念和术语
查看>>
ajax跨域,携带cookie
查看>>
阶段3 2.Spring_01.Spring框架简介_03.spring概述
查看>>
阶段3 2.Spring_02.程序间耦合_1 编写jdbc的工程代码用于分析程序的耦合
查看>>
阶段3 2.Spring_01.Spring框架简介_04.spring发展历程
查看>>
阶段3 2.Spring_02.程序间耦合_3 程序的耦合和解耦的思路分析1
查看>>
阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
查看>>
阶段3 2.Spring_01.Spring框架简介_05.spring的优势
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类
查看>>
阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
查看>>
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>