资源描述
嵌入式系统课程论文
基于安卓的
音乐播放器设计
学生姓名:
学 号:
所在学院:
专 业:
摘要
当今社会的生活节奏越来越快,随着硬件移动设备的越来越先进,人们对移动设备的要求也越来越高,从以前的追求技术到现在的追求视觉,因此,也逐步的提高了对系统的要求,本文主要是对Android系统上一款音乐播放器应用程序的设计与实现进行讨论.Android是一个开源的系统,它底层是基于Linux的操作系统,本论文的音乐播放器采用了Android开源系统技术,利用Java语言和Eclipse编辑工具对播放器进行编写。同时给出了详细的系统设计过程、部分界面图及主要功能运行流程图。本文还对高度过程中遇到的问题和解决方法进行了详细的讨论,该音乐播放器集播放、暂停、停止、上一首、下一首、音量调节、歌词显示等功能于一体,性能良好,在Android系统中能独立运行。该播放器还拥有对手机文件浏览器的访问功能、歌曲播放模式、以及歌词开闭状态的友好设置.MP3的全名是MPEG Audio Layer-3,是一种声音文件的压缩格式,由于本播放器只限于应用层程序的探讨,所以对具体的压缩算法不作深究。
关键词:Android ; 开源系统; 音乐播放器
数字信号处理课程论文
前言
本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。随着科技的进步,手机的功能也不断的得到丰富,从最早的“大哥大”到现在的商务PDA手机,智能手机,音乐手机等等,功能也从单纯的打电话发展到了发短信,听歌,上网。手机和我们生活的联系越来越紧密,手机的功能也是很多人们关注的焦点。
目前手机的音乐播放功能已经是大家比较关注的一个部分了,不少在人在购买手机的时候都会关心手机的音乐播放的能力,这也足以看出目前大家对音乐播放功能的重视,所以一款性能良好的手机音乐播放器软件一定会受到欢迎。和传统的音乐播放器相比,手机播放音乐更加的容易携带,其他方面也都不输于传统音乐播放器,而且还具有网上听音乐功能,所以开发一款受欢迎的手机音乐播放软件是具有良好的市场和应用前景的。一款专业的音乐播放软件是手机中必不可少的要素,几乎市场上所有的手机都拥有一个自带的音乐播放软件。不同手机平台的手机,所支持的音乐播放软件也是各不相同,而现在最流行的手机平台就是Google的Android手机平台,所以本课题就致力于开发出一款基于Android手机平台的音乐播放器,来满足用户的使用需求。
1 绪论
1.1 研究背景及意义
现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计的实现的这主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,上一曲,下一曲,音量调节,视觉外观,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。
目前手机的音乐播放功能已经是大家比较关注的一个部分了,不少在人在购买手机的时候都会关心手机的音乐播放的能力,这也足以看出目前大家对音乐播放功能的重视,所以一款性能良好的手机音乐播放器软件一定会受到欢迎。和传统的音乐播放器相比,手机播放音乐更加的容易携带,其他方面也都不输于传统音乐播放器,而且还具有网上听音乐功能,所以开发一款受欢迎的手机音乐播放软件是具有良好的市场和应用前景的。
1.2 课题目的及意义
本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。随着科技的进步,手机的功能也不断的得到丰富,从最早的“大哥大”到现在的商务PDA手机,智能手机,音乐手机等等,功能也从单纯的打电话发展到了发短信,听歌,上网....手机和我们生活的联系越来越紧密,手机的功能也是很多人们关注的焦点。
1.3 国内外发展历史及研究现状
1.3.1 国内发展历史及研究现状
首先简单的介绍一下Google的Android。Android原本是一家独立的手机操作系统公司,2005年被Googel收购。2007年11月,Googel宣布推出基于Linux的Android开放式手机操作系统,沿袭至今,已发展到2.2版本(3.0尚在研)。此系统的“开放”尤其体现在任何手机制造商均可无需支付专利费即可将此系统运用在自己的手机。Google的以Linux为内核的Android移动手机平台从诞生之日起短时间内便在世界范围里获得了广泛的关注。最近的报告显示在中国,一个拥有最大的人口,拥有最多的手机用户,拥有巨大的增长潜力的国家,这个系统的占有率沿着一个倒抛物线的增长曲率成为手机操作系统中的霸主。同时国外的Android市场也正在如日中天的扩展,据市场调研机构NPDGroup最近发布的一份报告称,今年第一季度基于Android操作系统的智能手机在美国智能手机总销量中所占比例达到28%,首度超过苹果iPhone,苹果iPhone约为21%,相信在不久的将来会有更多的用户选择Android系统的手机或是无线终端设备。
根据美国移动广告商AdMob的统计,iPhoneOS在美国本土的网络流量占了美国本土全部移动互联网流量的39%,而Android系统首次超越了它,达到了46%。不过要放在世界范围内来看,iPhone OS仍占了46%,而Android只占了25%,还是排第二。不过仍能说明 Android的来势汹汹,能对苹果造成威胁的果然只有Google。
1.3.2 国外发展历史及研究现状
国内目前中国移动、Moto、LG、三星、华为、MTK等正在积极筹备Android产品和相关的电子市场,中国移动率先推出了基于Android深度定制的Ophone系统和Mobile Marke,联想基于Android的乐phone手机也于5月17日正式上市,国内其他电子厂商也纷纷表示到下半年会推出大量的基于Android的手机和MID产品,Moto更是放弃了原有的所有手机操作系统,孤注一掷,计划今年国内市场有近20款Android产品面世。3G时代的到来,给中国企业追赶国际厂商带来了腾飞的机会,据预测亚太区域将来会占据全球Android市场中最大的收入份额。Android的代号序列会按甜点名字中首个英文字母(C、D、E、F)的排列顺序,到目前为止android系统已经有多个帮本: Android1.1发布于2009年2月主要特性:闹钟,API示例,浏览器,摄像头,计算器,联系人,开发工具包,拨号应用,电子邮件,地图,信息服务,音乐,图片,设置。2009年4月30日,官方1.5版本(Cupcake)的Android发布。主要的更新如下: 拍摄/回放视频,并支持上传到youtube,支持立体声蓝牙耳机,同时改善自动配对性能,最新的采用WebKit技术的浏览器,支持拷贝/粘帖和页面中搜索,gPS性能大大提高, 屏幕虚拟键盘,主屏幕增加音乐播放器和相框widgets,应用程序自动随着手机旋转 短信,Gmail,日历,浏览器的用户界面大幅改善,比如说Gmail现在可以批量删除邮件了 ,相机启动速度加快,拍摄图片可以直接上传到picasa, 来电照片显示。 2009年9月15日, 1.6(Donut)版本SDK发布。主要的更新如下:完全重新设计的Android Market,手势支持 ,支持CDMA网络 ,文字转语音系统(TXT-2-speech) ,快速搜索框,全新的拍照界面 ,应用程序耗电查看,支持VPN ,支持更多的屏幕分辨率,支持OpenCore2媒体引擎,新增面向视觉或听觉困难人群的易用性插件。
2009年10月26日, 2.0(Eclair)版本SDK发布。主要的更新如下:优化硬件速度,"Car Home"程序,支持更多的屏幕分辨率 ,重整界面,新的浏览器的用户界面和支持HTML5 ,新的联系人名单 ,更好的白色/黑色背景比率,改进Google Maps 3.1.2 ,支持Microsoft Exchange,支持内置相机闪光灯,数字变焦,改进的虚拟键盘,蓝牙2.1Android的代号序列会按甜点名字中首个英文字母(C、D、E、F)的排列顺序。下一个版本的Android将会命名为Froyo(冻酸奶,基于Linux Kernel 2.6.32)。Froyo 之后的版本的Android将会命名为Gingerbread(姜饼,基于Linux Kernel 2.6.33/34)。
1.4 本文主要研究的内容
本文的主要研究内容包括以下几个方面:
(1)查找相关书籍与文献,了解Android的构架并搭建Android平台。
(2) 查找相关资料,现阶段基于Android平台手机音乐播放器发展现状以及相关功能。
(3)在上述基础上,提出所要做的手机播放器的相关功能如:播放本地歌曲,设置,播放列表,播放记录等。
(4)在Android平台上完成该课题的软件并进行相应的软件测试。
2 系统需求分析
2.1 方案原理、特点、与选择依据
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
其最震撼人心之处在于Android手机系统的开放性和服务免费。Android是一个对第三方软件完全开放的平台,开发者在为其开发程序时 拥有更大的自由度,突破了IPhone等只能添加为数不多的固定软件的枷锁;同时与Windows Mobile、Symbian等厂商不同,Android操作系统免费向开发人员提供,这样可以节省三成成本。
设计的音乐播放器还应满足以下特点:
① 实用性:系统以用户需求为目标,以方便用户为原则。
② 稳定性:采用与音乐播放器软件大小相应的Android版本,使稳定性更高。
2.2 系统可行性分析
设计一个符合基本要求的基于Android的音乐播放器系统,要深入的了解Android的系统构架以及Android应用程序框架。Android的应用程序框架:框架是应用程序的核心,是所以参与开发的程序员共同所遵守的规则。以现阶段Android技术发展水平,技术人员的技术配备,以及现有资源文档的配备来说,实现本软件是可能的。3G技术飞速发展,为满足人们对音乐的追求,音乐播放器层出不从,然而市面上大多音乐播发器软件都太难操作,或者音质不好,不能给用户以更好体验,故提出开放一套更加人性化的手机播放器。
2.3 系统功能需求
系统的功能需求,我们分成三部分来概括,即播放器的基本控制需求,播放列表管理需求和播放器友好性需求。以下分别描述:
(1)播放器的基本控制需求
① 播放:双击播放列表中的歌曲进行播放,播放时会将该歌曲的信息显示的右边的歌曲信息面板中。
② 停止:在歌曲列表下方有一个小按钮,当歌曲正在播放时,显示的是可停止的按钮,点击则停止当前播放的歌曲。
(2)播放列表管理
① 添加歌曲: 选中歌曲类型后,单击右键选择添加歌曲或者点击左下角的添加按钮则弹出一个添加歌曲信息的会话框,填入歌曲信息。
② 删除歌曲:选中歌曲后,单击右键选择删除歌曲或者点击左下角的删除则弹出确认框。
(3)播放器友好性要求
① 视觉外观:使用播放器时,播放器根据歌曲文件的特性,通过视觉外观动态显示,外观优美。
② 系统:使用播放器时能显示播放器的状态,是播放还是暂停。
2.4 本章小结
通过从经济、技术、社会需求等方面对系统可行性进行的理论分析;以及系统功能实现的分析,明确系统设计的目的。获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。
3 播放器功能详细设计
3.1 音乐播放器登入界面与主界面
Android的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式,和各种资源文件如图像,文字,颜色的引用,程序在运行时,可以通过代码对各配置文件进行读取。这样就可以形成不同的可视化界面和炫丽的效果。播放器主界面是一个Activity,Android工程在每个activity启动的时候会首先执行Oncreate()方法,如下代码:
@Override
Public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play_rack);}
该方法主要执行界面的初始化操作,Activity有个设置布局的方法:Context.setContentView(layoutResID),参数为资源ID,该Id在工程目录res/layout下,主界面布局文件名为play_rack。
下面为play_rack.xml布局文件代码结构如下:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout>
<LinearLayout ></LinearLayout>
<SeekBar></SeekBar>
<LinearLayout></LinearLayout>
</AbsoluteLayout>
在绝对布局<AbsoluteLayout>下嵌套两种线性布局<LinearLayout>和<SeekBar>,第一个<LinearLayout>实现了标题和歌曲名的显示位置,通过<AbsoluteLayout>布局设置<LinearLayout>绝对坐标来控制标题的位置。每个布局内可以放置多种Widget(窗体部件)例如:<TextView><ImageButton>等。每个Widget内有多种属性,可以设置该Widget的坐标,大小,背景和颜色等参数。在播放界面中,歌词显示为居中,实现方法代码如下:
<LinearLayout android:orientation="horizontal"
android:gravity="center"android:layout_height="wrap_content" android:layout_width="fill_parent">
<TextView android:layout_height="wrap_content"
android:textColor="#8deeee" android:id="@+id/lrcText"
android:layout_width="wrap_content"></TextView>
</LinearLayout>
3.2 ××××
如图所示:各按钮水平放置,用的是布局中的线性布局LinearLayout,用方法setOrientation(horizontal);将其设置为水平。LinearLayout中依次放置播放,暂停,停止,上、下一曲按钮属性。配置文件代码结构如下:
<LinearLayout>
<ImageButton ></ImageButton>
<ImageButton ></ImageButton>
<ImageButton ></ImageButton>
<ImageButton ></ImageButton>
<ImageButton ></ImageButton>
</LinearLayout>
android的媒体播放原理:android源程序已经为我们封装好了一个接口类,叫MediaPlayer。该接口在执行行需要一个数据源,通过如下四个步骤:
第一步:MediaPlayer.reset();复位操作,为以后的媒体准备播放作准备。 第二步:传入歌曲数据源,这里也是一个数据流MediaPlayer.setDataSource(St
ring path);参数需要传一个路径,该接口类在收到路径后将其转化为数据源。
第三步:准备播放数据源,调用方法MediaPlayer.Prepare();
第四步:MediaPlayer.Start();播放数据源,该数据源播放后,不再与程序有关,需要用MediaPlayer.Stop()方法让其停止或MediaPlayer.Start();让其启动;
歌曲数据源的获得:要获得数据源,需要我们提供给接口类一个歌曲存放路径,而这个路径已经被事先放到数据库里了,我们只需要进行数据库进行操作。将里面的路径取出。这里将调用PlayRackActivity的一个方法query();代码算法如下:
public String query() {
ContentResolver cr = getContentResolver();
Uri uri = DBProvider.CONTENT_URI;
String[] projection = { "path" };
String selection = "fileName=?";
String[] selectionArgs = { selectName };
Cursor c=cr.query(uri,projection,selection, selectionArgs, null);
if (c.moveToFirst()) {
String path = c.getString(0);
return path;
}return null;
}
方法getContentResolver是包android.content.ContextWrapper里面的方法,它会自动的调用ContentProvider中的关联数据库,我们需用这个方法就可以操作数据库。数据库操作需要一个Uri 。Uri类似一个网络连接的Url。Uri是数据库唯一的标识,不同的Uri可以操作不同的数据库表。在查询数据库时需要传入一个当前播放的歌曲名字,通过歌曲名字来查询歌曲的路径。
3.3 本章小结
借由合理的分析设计。简单的安卓音乐播放器可以实现很多实用的功能,基于设计一个符合基本要求的基于Android的音乐播放器系统,要深入的了解Android的系统构架以及Android应用程序框架。Android的应用程序框架:框架是应用程序的核心,是所以参与开发的程序员共同所遵守的规则。以现阶段Android技术发展水平,技术人员的技术配备,以及现有资源文档的配备来说,实现本软件是可能的。3G技术飞速发展,为满足人们对音乐的追求,音乐播放器层出不从,然而市面上大多音乐播发器软件都太难操作,或者音质不好,不能给用户以更好体验。
结论
通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表、菜单、播放设置、文件浏览五大核心组成,只要掌握了这五部分的开发,音乐播放器就能初具规模。而其它的功能都是在这五个功能的基础上去补充添加的,但是这是功能的确是必不可少的功能,否则就不能算是音乐播放器了。
音乐播放器系统实现了播放器的基本功能:播放,暂停、停止、上/下一首、音量调节、歌词显示、播放模式等功能。运用的系统平台是现今最热门的Android系统,是一个开源的基于Linux系统的手机平台。是以Java语言编写和SQLite数据库支持+SharePreference配置文件的组合方式进行数据管理。实现了音乐播放器的系统编程。
本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工具是Eclipse 3.5.2 和Java语言的支持,Android Development Tool的插件,和Android SDK的全面结合,才使整个音乐播放器系统得以实现。
总之,经过几个月的Android系统技术知识的学习和对音乐播放器的构思与设计,使我对Android系统有了一定的了解,让我对Android系统上的开发流程和开发模式有了深入的了解,这对我以后的Android项目开发有很大的帮助。
参考文献
[1] 王家林编著. 大话企业级android应用开发实战[M]. 北京:电子工业出版社,2011-08-1
[2] 余志龙编著.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2009-7-1.
[3] E2ECloud工作室著.深入浅出Google Android[M].北京:人民邮电出版社,2009-08-1.
[4] 靳岩 姚尚朗著.Google Android开发入门与实战[M].北京:清华大学出版社,2009-07-01.
[5] Iphone应用开发权威指南 胡幸征著;北京:电子工业出版社,2010.1
[6] 陈晓红编著. 信息系统教程[M]. 北京:清华大学出版社, 2003.3
[7] 梅尔编著 Android高级编程[M]. 北京:清华大学出版社,2010.6
[8] 郭宏志编著 Android应用开发详解[M]. 北京:电子工业出版社,2010.6
[9] 张孝祥著 Java就业培训教程[M].北京:清华大学出版社,2007.
[10] 高昂著 支持动态语言的Android平台[M].北京:人民邮电出版社,2009-05-07.
[11] 汪永松编著 Android平台开发之旅[M] 北京:机械工业出版社 2010.6
[12] 李宁编著 Android应用开发实战[M] 北京:机械工业出版社 2012.1
[13] 杨文志编著 Google Android程序设计指南[M] 北京:电子工业出版社 2009.10
[14] 康德尔编著 Android移动应用开发从入门到精通[M] 北京:人民邮电出版社 2010.7
[15] 梁泉著 Android系统级深入开发—移植与调试[M] 北京:清华大学出版社 2011.2
附录
<?xmlversion="1.0"encoding="UTF-8"?>
<LinearLayoutandroid:layout_gravity="center"android:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"
xmlns:android="
<ProgressBarandroid:id="@android:id/progress"android:layout_width="wrap_content"android:layout_height="wrap_content"style="android:attr/progressBarStyleSmall"/>
<TextViewandroid:textStyle="bold"android:id="@+id/progress_info"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/loading"/>
</LinearLayout>
<?xmlversion="1.0"encoding="UTF-8"?>
<LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"
xmlns:android="
<includelayout="@layout/common_listview"/>
</LinearLayout>
<?xmlversion="1.0"encoding="UTF-8"?>
<RelativeLayoutandroid:background="@drawable/bg_player"android:layout_width="fill_parent"android:layout_height="fill_parent"
xmlns:android="
xmlns:kg="
<RelativeLayoutandroid:id="@+id/top_bar"android:background="@drawable/bg_player_topbar"android:layout_width="fill_parent"android:layout_height="wrap_content">
<ImageButtonandroid:id="@+id/playback_list"android:background="@drawable/playback_list_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"/>
<ImageButtonandroid:id="@+id/playback_mode"android:background="@drawable/playback_playmode_random_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"/>
<LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_toLeftOf="@+id/playback_mode"android:layout_toRightOf="@+id/playback_list"android:layout_centerHorizontal="true">
<TextViewandroid:textAppearance="?android:textAppearanceMedium"android:textStyle="bold"android:textColor="#ffffffff"android:gravity="center_horizontal"android:id="@+id/playback_audio_name"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text=""android:singleLine="true"/>
<TextViewandroid:textStyle="bold"android:textColor="#ffbdbfe2"android:gravity="center_horizontal"android:id="@+id/playback_artist_name"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text=""android:singleLine="true"android:layout_below="@+id/playback_audio_name"/>
</LinearLayout>
</RelativeLayout>
<TextViewandroid:textAppearance="?android:textAppearanceMedium"android:id="@+id/playback_current_playlist_name"android:visibility="gone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:singleLine="true"android:layout_below="@+id/top_bar"android:layout_centerHorizontal="true"/>
<ImageViewandroid:id="@+id/playback_album_art"android:background="@drawable/default_album"android:layout_width="fill_parent"android:layout_height="180.0px"android:layout_marginTop="5.0px"android:layout_below="@id/playback_current_playlist_name"/>
<SlidingDrawerandroid:orientation="vertical"android:id="@+id/playback_drawer"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_above="@+id/player_control_bar"android:layout_below="@+id/playback_current_playlist_name"android:bottomOffset="-80.0px"android:handle="@+id/drawer_handle"android:content="@+id/playback_lyrics"android:animateOnClick="true">
<ImageViewandroid:id="@+id/drawer_handle"android:background="@drawable/lyr_handle_collapse"android:layout_width="fill_parent"android:layout_height="wrap_content"/>
<Viewandroid:id="@+id/playback_lyrics"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_above="@+id/playback_progress_bar"/>
</SlidingDrawer>
<LinearLayoutandroid:orientation="vertical"android:id="@+id/player_control_bar"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true">
<RelativeLayoutandroid:id="@+id/playback_progress_bar"android:layout_width="fill_parent"android:layout_height="wrap_content">
<TextViewandroid:id="@+id/playback_current_time"android:paddingLeft="5.0dip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="00:00"android:layout_alignParentLeft="true"android:layout_centerVertical="true"/>
<TextViewandroid:id="@+id/playback_total_time"android:paddingRight="5.0dip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="00:00"android:layout_alignParentRight="true"android:layout_centerVertical="true"/>
<SeekBarandroid:id="@+id/playback_seeker"android:paddingLeft="9.0dip"android:paddingRight="9.0dip"android:focusable="false"android:clickable="true"android:layout_width="188.0dip"android:layout_height="wrap_content"android:maxHeight="30.0dip"android:max="100"android:progressDrawable="@drawable/playback_seekbar_style"android:minHeight="30.0dip"android:thumb="@drawable/playback_seekbar_thumb"android:thumbOffset="5.0dip"android:layout_toLeftOf="@+id/playback_total_time"android:layout_toRightOf="@+id/playback_current_time"android:layout_centerHorizontal="true"style="@android:attr/progressBarStyleHorizontal"/>
</RelativeLayout>
<RelativeLayoutandroid:id="@+id/play_bar"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_abov
展开阅读全文