安卓音樂播放器開發(fā),含源代碼_第1頁
安卓音樂播放器開發(fā),含源代碼_第2頁
安卓音樂播放器開發(fā),含源代碼_第3頁
安卓音樂播放器開發(fā),含源代碼_第4頁
安卓音樂播放器開發(fā),含源代碼_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、基于android平臺的音樂播放器開發(fā)實驗報告學生姓名:學號:班級:計自1201第一章引言1.1項目背景當今社會的生活節(jié)奏越來越快,人們對手機的要求也越來越高,由于手機市場發(fā)展迅速,使得手機操作系統(tǒng)也出現(xiàn)了不同各類,現(xiàn)在的市場上主要有三個手機操作系統(tǒng),Windowsmobile,symbian,以及谷歌的Android操作系統(tǒng),其中占有開放源代碼優(yōu)勢的Android系統(tǒng)有最大的發(fā)展前景。那么能否在手機上擁有自己編寫的個性音樂播放器呢?能的,谷歌Android系統(tǒng)就能做到。本文的音樂播放器就是基于谷歌Android手機平臺的播放器。Android:是谷歌于2007年公布的開放式源代碼手機系統(tǒng),它

2、的開放性就優(yōu)于其它封閉式的手機系統(tǒng),因此,任何人都可能根據(jù)自己的喜好將手機系統(tǒng)中的所有功能重新編寫。這使得越來越多的人關(guān)注這個操作系統(tǒng)。本次作品音樂播放器就是基于Android平臺的。1.2編寫目的現(xiàn)今社會生活緊張,而欣賞音樂是其中最好的舒緩壓力的方式之一,本項目的目的是開發(fā)一個可以播放主流音樂文件格式的播放器,本設(shè)計實現(xiàn)的主要功能是播放Mp3,Wav多種格式的音樂文件,并且能夠控制播放,暫停,停止,播放列等基本播放控制功能,界面簡明,操作簡單。本項目是一款基于Android手機平臺的音樂播放器,使Android手機擁有個性的多媒體播放器,使手機顯得更生動靈活化,與人們更為接近,讓手機主人隨時

3、隨地處于音樂視頻的旋律之中。使人們的生活更加多樣化。也使設(shè)計者更加熟練Android的技術(shù)和其它在市場上的特點。1.3開發(fā)環(huán)境Eclipse、AndroidSDK3.2.0第二章系統(tǒng)需求分析2.1功能需求(用例圖分析)根據(jù)項目的目標,我們可獲得項目系統(tǒng)的基本需求,以下從不同角度來描述系統(tǒng)的需求,并且使用用例圖來描述,系統(tǒng)的功能需求,我們分成四部分來概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器擴展卡需求。以下分別描述:2.1.1播放器的用例圖假設(shè)安裝了音樂播放器的用戶是系統(tǒng)的主要設(shè)計對象,其擁有以下操作,啟動軟件、播放音樂、暫停播放、停止播放、退出軟件,其用例圖如下圖

4、2.1播放器基本用例圖2.1.2用例分析用例名稱:啟動軟件參與者:用戶目標:使得用戶啟動軟件并加載手機和Sd卡上的音頻文件到播放列表前置條件:無基本事件流:1.用戶啟動軟件2.播放器將播放列表中的當前的歌曲用例名稱:播放參與者:用戶目標:使得用戶可以播放在播放列表中選中的歌曲前置條件:播放器正在運行基本事件流:1用戶單擊“播放”按鈕2.播放器將播放列表中的當前的歌曲用例名稱:暫停參與者:用戶目標:使得用戶可以暫停正在播放的歌曲前置條件:歌曲正在播放且未停止和暫停基本事件流:1用戶單擊“暫?!卑粹o2.播放器將暫停當前的歌曲用例名稱:停止參與者:用戶目標:使得用戶可以停止正在播放的歌曲前置條件:歌

5、曲正在播放或暫?;臼录鳎?用戶單擊“停止”按鈕2.播放器將停止當前播放的歌曲用例名稱:退出參與者:用戶目標:使得用戶退出或者后臺播放音樂前置條件:程序在運行基本事件流:1.用戶按返回鍵2.播放器退出或者進入后臺播放第三章概要設(shè)計3.1軟件播放流程圖Stepl.啟動軟件后,軟件自動檢索手機和sd卡的音頻文件,并組織顯示成列表.Step2.點擊列表的歌曲名字。Step3.播放音樂。Step4點擊暫停,音樂暫停Step5.點擊播放轉(zhuǎn)到step3Step6.點擊停止停止播放音樂Step7.點擊退出。圖3.l音樂播放器流程圖第四章界面展示41軟件部署系統(tǒng)編譯生成apk文件,將apk文件拷到手機或者s

6、d卡中,直接打開即可安裝。4.2啟動軟件打開軟件后的界面沖嚴*;NI2D00叫“in:訂點4.3歌曲列表界面丫|:1111:沿3og|iyr瓷卡地tv曲雜卷煩耳是2瑕製*13Uflt密MQ便曲gft-時熹$*5圣杰八iht肉邂-擊和當番雄SJtkitowfOr*:n壬力宦-HH訂出ft亠O白白4王n-ssti&C妙llqwtanR:NJi#總炫-堀罡屆烤tUA七3KTL為亠.;&yiflQidm占X共時曲一井i生*W百.也,戈遼上:;砂界Px茨.F.二丄_J%tv叢初令倉魯3應(yīng)“n*.*FT-*K!j.-廠F-V,.甦的收凰JXv莊線音樂入歌曲列表界面44播放界面4.5收藏界面7l|lH瘟石&

7、S二鼻賢R7l|lH1112CQ農(nóng)心就i|l油7l|lH1112CQ農(nóng)心就i|l油4.6在線搜索音樂界面尢殲F斤吞電W本地音刊.我的收姦第五章結(jié)論通過本次開發(fā)解決了諸如SD卡音樂文件搜索并顯示、聯(lián)網(wǎng)搜索歌曲等難題,對安卓的開發(fā)有了更深入的認識。通過對Android手機平臺的音樂播放器軟件的開發(fā),使我對Android音樂播放器系統(tǒng)的整體設(shè)計有一個深入的了解,對整個流程也會有一個清晰的認識。開發(fā)Android音樂播放器,要抓住開發(fā)的核心部分,音樂播放器大體由播放主界面、播放列表、菜單、播放設(shè)置、文件瀏覽、歌曲搜索六大核心組成。本次程序設(shè)計,對播放器的系統(tǒng)結(jié)構(gòu)框架做了精心的構(gòu)思與設(shè)計,采用主要開發(fā)工

8、具是Eclips4.0+Java語言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2.1版本的全面結(jié)合,才使整個音樂播放器系統(tǒng)得以實現(xiàn)。第五章部分源代碼以下給出功能實現(xiàn)代碼,布局,風格等代碼量過大,放在壓縮文件中MainActivity.java:packagecom.example.xindong;importandroid.support.v7.app.ActionBarActivity;importandroid.support.v4.app.Fragment;importandroid.content.Intent;importandroid.os.

9、Bundle;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.Window;publicclassMainActivityextendsActionBarActivityOverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstan

10、ceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.fragment_main);Threadthread=newThread()publicvoidrun()trysleep(2500);catch(InterruptedExceptione)e.printStackTrace();finish();Intentintent=newIntent(MainActivity.this,MusicActivity.class);startActivity(intent);thread.star

11、t();OverridepublicbooleanonCreateOptionsMenu(Menumenu)/Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.main,menu);returntrue;OverridepublicbooleanonOptionsItemSelected(MenuItemitem)/Handleactionbaritemclickshere.Theactionbarwill/automaticallyhandleclicksonthe

12、Home/Upbutton,solong/asyouspecifyaparentactivityinAndroidMid=item.getItemId();if(id=R.id.action_settings)returntrue;returnsuper.onOptionsItemSelected(item);/*Aplaceholderfragmentcontainingasimpleview.*/publicstaticclassPlaceholderFragmentextendsFragmentpublicPlaceholderFragment()Overr

13、idepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState)ViewrootView=inflater.inflate(R.layout.fragment_main,container,false);returnrootView;BandanActivity.javapackagecom.example.xindong;importcom.example.Adapter.MusicListAdapter;importandroid.app.Activity;import

14、android.content.Intent;importandroid.database.Cursor;importandroid.media.MediaPlayer;importandroid.os.Bundle;vider.MediaStore;importandroid.view.KeyEvent;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.ListView;importandroid.widget.Toast;importandroid.widget.AdapterView

15、.OnItemClickListener;publicclassBangdanActivityextendsActivityprivateListViewlistview;privateStringmusicpath;privateint_ids;/存放音樂文件的id數(shù)組privateString_titles;/存放音樂文件的標題數(shù)組privateString_artists;/存放音樂藝術(shù)家的標題數(shù)組privateString_path;/存放音樂路徑的標題數(shù)組privateString_times;/存放總時間的標題數(shù)組privateString_album;/存放專輯的標題數(shù)組priv

16、ateint_sizes;/存放文件大小的標題數(shù)組privateString_displayname;/存放名稱的標題數(shù)組OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.bangdanmusic_list);listview=(ListView)findViewById(R.id.bangdan_music_list);listview.setOnItemClickListener(newMusicListOnCli

17、ckListener();ShowMp3List();/*首歌曲,*顯示MP3信息,其中_ids保存了所有音樂文件的_ID,用來確定到底要播放哪一_titles存放音樂名,用來顯示在播放界面,*而_path存放音樂文件的路徑(刪除文件時會用到)*/privatevoidShowMp3List()/用游標查找媒體詳細信息/標題,游標Cursorcursor=this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,newStringMediaStore.Audio.Media.TITLE,/持續(xù)時從0讀

18、取MediaStore.Audio.Media.DURATION,/藝術(shù)家,2/id,3間,1MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DISPLAY_NAME,/顯示名稱,4MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.ALBUM_ID,ID,6MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.SIZE,MediaStore.Audio.Media.ARTIST);/

19、大小,8/數(shù)據(jù),5/專輯名稱/專輯,7null,null,/*將游標移到第一位*/cursor.moveToFirst();/*分別將各個標題數(shù)組實例化*/_ids=newintcursor.getCount();_titles=newStringcursor.getCount();_artists=newStringcursor.getCount();_path=newStringcursor.getCount();_album=newStringcursor.getCount();_times=newStringcursor.getCount();_displayname=newStrin

20、gcursor.getCount();sizes=newintcursor.getCount();/*這里獲取路徑的格式是_pathi=c.geString,為什么這么寫?是因為MediaStore.Audio.Media.DATA的關(guān)系到的內(nèi)容格式為/mnt/sdcard/子文件夾名/音樂文件名,而我們想要得到的是/sdcard/子文件夾名音樂文件名*/for(inti=0;icursor.getCount();i+)_idsi=cursor.getInt(3);_titlesi=cursor.getString(0);_artistsi=cursor.getString(2);_pathi

21、=cursor.getString(5).substring(4);/*以下是為提供音樂詳細信息而生成的*/_albumi=cursor.getString(7);_timesi=toTime(cursor.getInt(1);_sizesi=cursor.getInt(8);_displaynamei=cursor.getString(4);cursor.moveToNext();listview.setAdapter(newMusicListAdapter(this,cursor);/*時間的轉(zhuǎn)換*/publicStringtoTime(inttime)time/=1000;intminu

22、te=time/60;intsecond=time%60;minute%=60;/*返回結(jié)果用string的format方法把時間轉(zhuǎn)換成字符類型*/returnString.format(%02d:%02d,minute,second);/*音樂列表添加監(jiān)聽器,點擊之后播放音樂*/publicclassMusicListOnClickListenerimplementsOnItemClickListenerOverridepublicvoidonItemClick(AdapterViewarg0,Viewview,intposition,longid)musicpath=/mnt+_pathp

23、osition;playMusic(musicpath);/*putExtraMusic(position);*/Intentintent=newIntent(BangdanActivity.this,PlayMusicActivity.class);startActivity(intent);finish();publicvoidplayMusic(Stringmusicpath)tryMediaPlayermp=newMediaPlayer();mp.reset();mp.setDataSource(musicpath);mp.prepare();mp.start();catch(Exce

24、ptione)Toast.makeText(getApplicationContext(),無法播放此文件,Toast.LENGTH_SHORT).show();publicvoidputExtraMusic(intposition)Intentintent=newIntent(BangdanActivity.this,PlayMusicActivity.class);/*intent.putExtra(_ids,_ids);intent.putExtra(_path,_path);intent.putExtra(_titles,_titles);intent.putExtra(_artist

25、s,_artists);intent.putExtra(position,position);startActivity(intent);finish();*/intent=newIntent();Bundlebundle=newBundle();bundle.putInt(position,25);intent.putExtras(bundle);intent.setClass(BangdanActivity.this,PlayMusicActivity.class);startActivity(intent);finish();OverrideprotectedvoidonStop()su

26、per.onStop();privatelongexitTime=0;publicbooleanonKeyDown(intkeyCode,KeyEventevent)if(keyCode=KeyEvent.KEYCODE_BACK&event.getAction()=KeyEvent.ACTION_DOWN)if(System.currentTimeMillis()-exitTime)2000)Toast.makeText(getApplicationContext(),再按一次退出程序,Toast.LENGTH_SHORT).show();exitTime=System.currentTim

27、eMillis();elsefinish();System.exit(0);returntrue;returnsuper.onKeyDown(keyCode,event);CollectionActivity.javapackagecom.example.xindong;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importandroid.app.ExpandableListActivity;importandroid.os.Bundle;importan

28、droid.view.KeyEvent;importandroid.widget.SimpleExpandableListAdapter;importandroid.widget.Toast;publicclassCollectionActivityextendsExpandableListActivityOverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.fragment_collection);/一級條目ListMapgr

29、oups=newArrayListMap();Mapgroup1=newHashMap();groupl.put(group,【歌手】);Mapgroup2=newHashMap();group2.put(group,【專輯】);groups.add(groupl);groups.add(group2);/二組條目ListListMapchilds=newArrayListListMap();/第一組二級科目數(shù)據(jù)ListMapchild1=newArrayListMap();Mapitem1=newHashMap();iteml.put(child,林俊杰);Mapitem2=newHashM

30、ap();item2.put(child,周杰倫);childl.add(iteml);childl.add(item2);/第二組二級科目數(shù)據(jù)ListMapchild2=newArrayListMap();Mapitem3=newHashMap();item3.put(child,v);Mapitem4=newHashMap();item4.put(child,vv流行主教);Mapitem5=newHashMap();item5.put(child,vv第二天堂);child2.add(item3);child2.add(item4);child2.add(item5);childs.ad

31、d(childl);childs.add(child2);/SimpleExpandableListAdapter構(gòu)造函數(shù)參數(shù)/l.content/2.一級條目數(shù)據(jù)/3.一級條目布局文件/4.一級條目Key5.級條目顯示信息控件id/6.二級條目數(shù)據(jù)/7.二級條目布局文件/8.二級條目Key/9.二級條目顯示信息控件idSimpleExpandableListAdapteradapter=newSimpleExpandableListAdapter(this,groups,R.layout.group,newStringgroup,newintR.id.groupTo,childs,R.lay

32、out.child,newStringchild,newintR.id.childTo);setListAdapter(adapter);privatelongexitTime=0;publicbooleanonKeyDown(intkeyCode,KeyEventevent)if(keyCode=KeyEvent.KEYCODE_BACK&event.getAction()=KeyEvent.ACTION_DOWN)if(System.currentTimeMillis()-exitTime)2000)Toast.makeText(getApplicationContext(),再按一次退出

33、程序,Toast.LENGTH_SHORT).show();exitTime=System.currentTimeMillis();elsefinish();System.exit(0);returntrue;returnsuper.onKeyDown(keyCode,event);/*初始化菜單*/publicbooleanonMenuKeyDown(intkeyCode,KeyEventevent)if(keyCode=KeyEvent.KEYCODE_MENU&event.getAction()=KeyEvent.ACTION_DOWN)Toast.makeText(getApplica

34、tionContext(),未定義菜單,Toast.LENGTH_SHORT).show();returntrue;Contsant.javapackagecom.example.xindong;importandroid.content.Context;importandroid.util.DisplayMetrics;importandroid.view.Display;importandroid.view.WindowManager;publicclassContsant/*獲取屏幕的大小0:寬度1:高度*/publicstaticintgetScreen(Contextcontext)

35、WindowManagerwindowManager=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);Displaydisplay=windowManager.getDefaultDisplay();DisplayMetricsoutMetrics=newDisplayMetrics();display.getMetrics(outMetrics);returnnewint(int)(outMetrics.density*outMetrics.widthPixels),(int)(outMetrics.densit

36、y*outMetrics.heightPixels);/*獲取文件的后綴名,返回大寫*/publicstaticStringgetSuffix(Stringstr)inti=str.lastIndexOf(.);if(i!=-1)returnstr.substring(i+1).toUpperCase();returnstr;/*格式化文件大小Byte-MB*/publicstaticStringformatByteToMB(intsize)floatmb=size/1024f/1024f;returnString.format(%.2f,mb);LRCbean.javapackagecom.

37、example.xindong;/*歌詞實體*/publicclassLRCbeanprivateintbeginTime=0;/開始時間publicintgetBeginTime()returnbeginTime;publicvoidsetBeginTime(intbeginTime)this.beginTime=beginTime;publicintgetLineTime()returnlineTime;publicvoidsetLineTime(intlineTime)this.lineTime=lineTime;publicStringgetLrcBody()returnlrcBody

38、;publicvoidsetLrcBody(StringlrcBody)this.lrcBody=lrcBody;privateintlineTime=0;privateStringlrcBody=null;/歌詞實體MDialog.javapackagecom.example.xindong;importandroid.app.Activity;importandroid.app.Dialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.text.TextUtils;imp

39、ortandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.ViewGroup.LayoutParams;importandroid.widget.Button;importandroid.widget.FrameLayout;importandroid.widget.ImageView;importandroid.widget.LinearLayout;importandroid.widget.TextView;/*自定義的對話框*/publicc

40、lassMDialogextendsDialogpublicMDialog(Contextcontext)super(context);publicMDialog(Contextcontext,inttheme)super(context,theme);publicstaticclassBuilderprivateContextcontext;privateintmIcon=-1;/提示圖標privateCharSequencemTitle;/提示標題privateCharSequencemMessage;/提示內(nèi)容privateCharSequencemPositiveButtonText;

41、/確定按鈕文本privateCharSequencemNegativeButtonText;/拒絕按鈕文本privateCharSequencemNeutralButtonText;/中間按鈕文本privatebooleanmCancelable=true;/是否啟用取消鍵privateintmViewSpacingLeft;privateintmViewSpacingTop;privateintmViewSpacingRight;privateintmViewSpacingBottom;privatebooleanmViewSpacingSpecified=false;/提示內(nèi)容Viewpr

42、ivateViewmView;privateOnClickListenermPositiveButtonClickListener,mNegativeButtonClickListener,mNeutralButtonClickListener;privateOnCancelListenermCancelListener;/取消鍵事件privateOnKeyListenermKeyListener;/按鍵處理publicBuilder(Contextcontext)this.context=context;publicBuildersetMessage(CharSequencemessage)

43、this.mMessage=message;returnthis;publicBuildersetMessage(intmessage)this.mMessage=context.getText(message);returnthis;publicBuildersetTitle(inttitle)this.mTitle=context.getText(title);returnthis;publicBuildersetTitle(CharSequencetitle)this.mTitle=title;returnthis;publicBuildersetIcon(inticon)this.mI

44、con=icon;returnthis;publicBuildersetView(Viewview)this.mView=view;mViewSpacingSpecified=false;returnthis;publicBuildersetView(Viewview,intleft,inttop,intright,intbottom)this.mView=view;this.mViewSpacingLeft=left;this.mViewSpacingTop=top;this.mViewSpacingRight=right;this.mViewSpacingBottom=bottom;mVi

45、ewSpacingSpecified=true;returnthis;publicBuildersetPositiveButton(inttextId,finalOnClickListenerlistener)this.mPositiveButtonText=context.getText(textId);this.mPositiveButtonClickListener=listener;returnthis;publicBuildersetPositiveButton(Stringtext,finalOnClickListenerlistener)this.mPositiveButtonT

46、ext=text;this.mPositiveButtonClickListener=listener;returnthis;publicBuildersetNeutralButton(inttextId,finalOnClickListenerlistener)this.mNeutralButtonText=context.getText(textId);this.mNeutralButtonClickListener=listener;returnthis;publicBuildersetNeutralButton(Stringtext,finalOnClickListenerlisten

47、er)this.mNeutralButtonText=text;this.mNeutralButtonClickListener=listener;returnthis;publicBuildersetNegativeButton(inttextId,finalOnClickListenerlistener)this.mNegativeButtonText=context.getText(textId);this.mNegativeButtonClickListener=listener;returnthis;publicBuildersetNegativeButton(Stringtext,

48、finalOnClickListenerlistener)this.mNegativeButtonText=text;this.mNegativeButtonClickListener=listener;returnthis;publicBuildersetCancelable(booleancancelable)this.mCancelable=cancelable;returnthis;publicBuildersetOnCancelListener(OnCancelListenerlistener)this.mCancelListener=listener;returnthis;publ

49、icBuildersetOnKeyListener(OnKeyListenerlistener)this.mKeyListener=listener;returnthis;publicMDialogcreate()LayoutInflaterinflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);finalMDialogdialog=newMDialog(context,R.style.XfDialog);dialog.setCancelable(mCancelable);/設(shè)置取消鍵

50、事件if(mCancelListener!=null)dialog.setOnCancelListener(mCancelListener);/設(shè)置鍵盤監(jiān)聽事件if(mKeyListener!=null)dialog.setOnKeyListener(mKeyListener);/獲取對話框布局Viewlayout=inflater.inflate(R.layout.alert_dialog,(ViewGroup)(Activity)context).findViewById(R.id.parentPanel);layout.setLayoutParams(newLayoutParams(La

51、youtParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);/設(shè)置標題(TextView)layout.findViewById(R.id.alertTitle).setText(mTitle);/設(shè)置圖標if(mIcon!=-1)(ImageView)layout.findViewById(R.id.icon).setBackgroundResource(mIcon);intcount=0;/設(shè)置確定按鈕if(setButton(layout,mPositiveButtonText,R.id.button1,dialog,mPositiveButton

52、ClickListener)count+;/設(shè)置拒絕按鈕if(setButton(layout,mNegativeButtonText,R.id.button2,dialog,mNegativeButtonClickListener)count+;/設(shè)置中間按鈕if(setButton(layout,mNeutralButtonText,R.id.button3,dialog,mNeutralButtonClickListener)count+;if(count=0)layout.findViewById(R.id.buttonPanel).setVisibility(View.GONE);/

53、一個按鈕時,顯示兩邊空間if(count=1)layout.findViewById(R.id.leftSpacer).setVisibility(View.INVISIBLE);layout.findViewById(R.id.rightSpacer).setVisibility(View.INVISIBLE);/設(shè)置提示消息if(!TextUtils.isEmpty(mMessage)(TextView)layout.findViewById(R.id.message).setText(mMessage);else(LinearLayout)layout.findViewById(R.id

54、.contentPanel).setVisibility(View.GONE);/設(shè)置提示內(nèi)容布局if(mView!=null)finalFrameLayoutcustomPanel=(FrameLayout)layout.findViewById(R.id.customPanel);if(mViewSpacingSpecified)customPanel.setPadding(mViewSpacingLeft,mViewSpacingTop,mViewSpacingRight,mViewSpacingBottom);customPanel.addView(mView);else(FrameL

55、ayout)layout.findViewById(R.id.customPanel).setVisibility(View.GONE);dialog.setContentView(layout);returndialog;publicMDialogshow()MDialogdialog=create();dialog.show();returndialog;privatebooleansetButton(Viewlayout,CharSequencemPositiveButtonText2,intid,finalDialogdialog,finalOnClickListenerlistene

56、r)if(!TextUtils.isEmpty(mPositiveButtonText2)finalButtonbutton1=(Button)layout.findViewById(id);button1.setText(mPositiveButtonText2);if(listener!=null)button1.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)listener.onClick(dialog,DialogInterface.BUTTON_POSITIVE););else/默認事件為關(guān)閉對

57、話框button1.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)dialog.cancel();dialog.dismiss(););returntrue;elselayout.findViewById(id).setVisibility(View.GONE);returnfalse;MusicActivity.javapackagecom.example.xindong;importandroid.os.Bundle;importandroid.view.Window;importandroid.wi

58、dget.RadioGroup;importandroid.widget.TabHost;importandroid.widget.RadioGroup.OnCheckedChangeListener;importandroid.app.TabActivity;importandroid.content.Intent;/*以Tabhost+RadioGroup組合*/publicclassMusicActivityextendsTabActivityimplementsOnCheckedChangeListenerprivateTabHosttabhost;privateRadioGroupr

59、adiogroup;OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.fragment_music);tabhost=getTabHost();radiogroup=(RadioGroup)findViewById(R.id.tab_group);radiogroup.setOnCheckedChangeListener(thi

60、s);radiogroup.setClickable(true);tabhost.addTab(tabhost.newTabSpec(local_music).setIndicator(local_music).setContent(newIntent(this,MusicListActivity.class);tabhost.addTab(tabhost.newTabSpec(my_collect).setIndicator(my_collect).setContent(newIntent(this,CollectionActivity.class);tabhost.addTab(tabho

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論