4.1.3 主界面中子界面实现
主界面中实现三个界面的切换,分别是书架界面和书签界面,其中书架界面对应的布局文件是book_shelf.xml,而书签界面没有与之相对应的布局文件,是在代码里面直接创建的。
(1) 书架界面的实现。
书架界面的布局文件中主要定义了三个控件,分别是ListView、SlidingDrawer和自定义的一个SD卡遍历控件FileBrowser。
ListView是比较常用的组件,它以列表的形式展示具体内容,并能根据数据的长度自适应显示。
ListView显示内容需要一个适配器,Android自带的一些适配器如ArrayAdapter、SimpleAdapter等,但这些显示比较单一,所以本软件中自定义一个Adapter继承BaseAdapter,通过对这个适配器的扩展实现我们需要的效果,扩展成一行能显示多个内容。由于BaseAdapter是一个抽象类,我们需要实现里面的getView方法返回一个view,即视图,视图可以显示在Activity上,每个view对应列表中的一项,view的内容主要是通过反转来获得,书架中view反转的布局文件是book_shelf_listview_item.xml,再通过getCount方法返回列表显示的项的数量,这样就可以看到我们想要的界面。
ListView有一个监听器OnItemClickListner,实现里面的方法,就可以监听Touch事件,当手指点击到每一行时,可以通过监听器方法public void onItemClick
(AdapterView<?> parent, View view, int position,long id)方法中的参数position得到该行位置,这样就可以通过intent传递数据到其他Activity。本程序的思路是点击其中某一行,跳转到另一个Activity,即阅读界面,书架界面运行效果如图4.2所示。
SlidingDrawer隐藏屏外的内容,并允许用户通过handle以显示隐藏内容,这是一种类似抽屉开关的那种效果。它可以垂直或水平滑动,它有俩个View组成,其一是可以拖动的handle,其二是隐藏内容的View。它里面的控件必须设置布局,在布局文件中必须指定handle和content。SlidingDrawer运行效果如图4.3所示。
在本软件中的handle是一个ImageButton,而content这是在上文中提到的自定义的SD卡遍历控件FileBrowser。FileBrowser的实现会在下文的功能实现中做详细的说明。
图 4.2文本阅读软件书架截图
图 4.3文本阅读软件书架打开SD卡截图
(2) 书签界面的实现
这个界面在整体布局上没有使用布局文件,而是这个界面的Activity继承的是ListActivity,通过ListActivity.getListView()方法得到ListView的实例。关于列表项的呈现就和上文中书架界面的实现十分相似了,也是通过反转布局文件来显示项的视图,反转的布局文件分别是bookmark_lv_item.xml。书签界面运行效果如图4.4所示:
图 4.4书架界面运行效果截图
(3) 阅读界面的实现
阅读界面的实现主要是自定义了一个阅读翻页控件,界面的主题是很多张画布Canva,文本的内容是通过Canva.drawText()画在Canva上,而通过自定义的翻页动画连接上下画布的切换,这样就形成了翻页效果。阅读界面运行效果如图4.7所示。
由于阅读时的功能比较多,如果仅仅使用Android系统自带的Menu显然已经不能满足界面友好的要求。在文本阅读软件中自定义了一个菜单控件TabMenu,实现分栏显示菜单功能选项。
TabMenu主要是通过使用PopupWindow来实现的,设置popupwindow的view是一个GridView,gridview中是两个标题选项栏,就是菜单功能组,而在每个标题选项栏中又都有一些子选项栏。GridView的显示也是需要适配器来实现的,这里考虑到菜单的功能需要添加一些自定义的信息,所以这里也是采用了继承BaseAdapter自定义了一个适配器来绑定。为了能使TabMenu更像Menu的体验,就摸拟了Menu显示和消失的效果,效果的实现是通过动画来模拟的,主要是创建两个动画的文件: Android平台手机文本阅读软件的开发与设计(12):http://www.751com.cn/jisuanji/lunwen_1192.html