android 笔记本导航,Android 导航

一.导航抽屉Navigation Drawer

想必用过Android的人都熟悉导航抽屉,这算是一个比较经典的导航方式了,个人也非常喜欢这种导航方式。下面介绍这种导航方式的开发方法。

d9abc3382d4f41583f5fcf8d24099158.png

导航抽屉

创建一个抽屉布局DrawerLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/drawer_layout"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/content_frame"

android:layout_width="match_parent"

android:layout_height="match_parent" />

android:layout_width="240dp"

android:layout_height="match_parent"

android:layout_gravity="start"

android:choiceMode="singleChoice"

android:divider="@android:color/transparent"

android:dividerHeight="0dp"

android:background="#111"/>

这里有一些需要注意的地方:

要添加一个导航抽屉,首先应该用support库提供的DrawerLayout布局来作为你的主布局的根布局,在根布局中,应该包含显示主要内容的布局和drawer的布局。

第一个布局必须是你的主要内容的布局(因为XML文件是根据z轴的顺序来显示,而抽屉要在主要内容的上面)

主要内容布局需要将长宽都设置为铺满父容器,因为当抽屉隐藏时,它是主要显示的容器。

抽屉view(the ListView)必须指定horizontal_gravity,通过设置android:layout_gravity。为了支持从右向左的语言,最好指定值为"start"而不是left。

为了让用户能看见主页面的一部分,抽屉view的宽度应该用dp来设置,并且尽量不要超过320dp。

初始化Drawer List

在你的activity中,第一件事就应该去初始化导航抽屉列表的每一项。不管你怎么去组织你的app内容,一个导航抽屉通常都是由一个列表组成的,所以我们应该从一个适配器Adapter开始入手(比如ArrayAdapter或者SimpleCursorAdapter)。

例如,这段代码演示了如何通过一个string array来初始化你的列表。

public class MainActivity extends Activity {

private String[] mPlanetTitles;

private DrawerLayout mDrawerLayout;

private ListView mDrawerList;

...

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mPlanetTitles = getResources().getStringArray(R.array.planets_array);

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

mDrawerList = (ListView) findViewById(R.id.left_drawer); // 为list设置一个适配器

mDrawerList.setAdapter(new ArrayAdapter(this, R.layout.drawer_list_item, mPlanetTitles)); // 设置一个监听器

mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); ...

}

}

通过setOnItemClickListener()接收导航抽屉的列表点击事件。接下来展示如何实现这个接口和当选择一项时改变主页面。

处理导航点击事件

当用户点击抽屉的列表时,系统会在你通过setOnItemClickListener()设置的监听器OnItemClickListener()上调用onItemClick()

你的onItemClick()的功能取决于你的app的功能。在下面的例子中,选择每一项都会动态的插入一个不同的Fragment到主页面(FrameLayout)中。

private class DrawerItemClickListener implements ListView.OnItemClickListener {

@Override

public void onItemClick(AdapterView parent, View view, int position, long id) {

selectItem(position);

}

}

/** 替换主页面中的fragment */

private void selectItem(int position) {

// Create a new fragment and specify the planet to show based on position

Fragment fragment = new PlanetFragment();

Bundle args = new Bundle();

args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);

fragment.setArguments(args);

// 通过替换已存在的fragment来插入

FragmentManager fragmentManager = getFragmentManager();

fragmentManager.beginTransaction()// 开始事务

.replace(R.id.content_frame, fragment)// 替换

.commit();// 提交

// 高亮选中项,设置标题,关闭抽屉

mDrawerList.setItemChecked(position, true);

setTitle(mPlanetTitles[position]);

mDrawerLayout.closeDrawer(mDrawerList);

}

@Overridepublic void setTitle(CharSequence title) {

mTitle = title;

getActionBar().setTitle(mTitle);

}

监听打开和关闭抽屉事件

要监听打开和关闭事件,首先应该在你的DrawerLayout上设置监听器setDrawerListener(),还要实现DrawerLayout.DrawerListener,这个接口提供回调函数,比如 onDrawerOpened()和onDrawerClosed()。

然而,与其实现这个接口,如果你的activity包含了actionbar,你可以替换为使用ActionBarDrawerToggle类,这个类实现了DrawerLayout.DrawerListener这个接口,你仍可以去重载那些回调函数,但是使用ActionBarDrawerToggle可以促进action bar的图标和导航抽屉的正确的交互。

当抽屉可见时,你应该改变action bar的内容,像是改变标题,移除action items来适应主页面的内容,下面的代码通过一个ActionBarDrawerToggle类展示了如何去重载DrawerLayout.DrawerListener回调函数。

public class MainActivity extends Activity {

private DrawerLayout mDrawerLayout;

private ActionBarDrawerToggle mDrawerToggle;

private CharSequence mDrawerTitle;

private CharSequence mTitle;

...

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

...

mTitle = mDrawerTitle = getTitle();

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,

R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {

/** 当抽屉完全关闭时调用*/

public void onDrawerClosed(View view) { super.onDrawerClosed(view);

getActionBar().setTitle(mTitle);

invalidateOptionsMenu(); // 创建调用onPrepareOptionsMenu()

}

/** 当抽屉完全打开时调用 */

public void onDrawerOpened(View drawerView) {

super.onDrawerOpened(drawerView);

getActionBar().setTitle(mDrawerTitle);

invalidateOptionsMenu(); // 创建调用onPrepareOptionsMenu()

}

};

// 设置toggle为抽屉监听器

mDrawerLayout.setDrawerListener(mDrawerToggle);

}

/* 当调用invalidateOptionsMenu()时调用 */

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

// 如果导航抽屉式打开的,根据内容隐藏action items

boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);

menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);

return super.onPrepareOptionsMenu(menu);

}

}

下个部分介绍ActionBarDrawerToggle的构造函数参数和与action icon交互的其他要求。

通过App Icon来打开和关闭抽屉

用户能够通过右滑来打开抽屉,但是如果你使用action bar,那么你也应该允许用户通过点击App Icon来打开和关闭抽屉。同时也应该通过一个特殊的icon来显示隐藏抽屉的存在。你能够通过之前介绍的ActionBarDrawerToggle来实现。

为了使ActionBarDrawerToggle工作,在这里创建一个例子和他的构造函数,他需要以下的元素:

托管抽屉的Activity

DrawerLayout

一个图片资源用作抽屉开关的指示器

图片资源

一个描述抽屉打开的string(为了用户友好)

一个描述抽屉关闭的string(为了用户友好)

不管你是否创建了ActionBarDrawerToggle的子类作为你抽屉监听器,你需要在你的activity的整个生命周期中能够调用ActionBarDrawerToggle

public class MainActivity extends Activity {

private DrawerLayout mDrawerLayout;

private ActionBarDrawerToggle mDrawerToggle;

...

public void onCreate(Bundle savedInstanceState) {

...

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */

mDrawerLayout, /* DrawerLayout object */

R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */

R.string.drawer_open, /* "open drawer" description */

R.string.drawer_close /* "close drawer" description */

) {

/** Called when a drawer has settled in a completely closed state. */

public void onDrawerClosed(View view) {

super.onDrawerClosed(view);

getActionBar().setTitle(mTitle);

}

/** Called when a drawer has settled in a completely open state. */

public void onDrawerOpened(View drawerView) {

super.onDrawerOpened(drawerView);

getActionBar().setTitle(mDrawerTitle);

} };

// Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle);

getActionBar().setDisplayHomeAsUpEnabled(true);

getActionBar().setHomeButtonEnabled(true);

}

@Override

protected void onPostCreate(Bundle savedInstanceState) {

super.onPostCreate(savedInstanceState);

// Sync the toggle state after onRestoreInstanceState has occurred.

mDrawerToggle.syncState();

} @Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

mDrawerToggle.onConfigurationChanged(newConfig);

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Pass the event to ActionBarDrawerToggle, if it returns

// true, then it has handled the app icon touch event

if (mDrawerToggle.onOptionsItemSelected(item)) {

return true;

}

// Handle your other action bar items...

return super.onOptionsItemSelected(item);

}

...

}

最后给一个例子的完整版

导航抽屉完整版

未完待续……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值