2023年Android开发一些重要知识点.pdf

上传人:奔*** 文档编号:94459629 上传时间:2023-07-31 格式:PDF 页数:96 大小:10.12MB
返回 下载 相关 举报
2023年Android开发一些重要知识点.pdf_第1页
第1页 / 共96页
2023年Android开发一些重要知识点.pdf_第2页
第2页 / 共96页
点击查看更多>>
资源描述

《2023年Android开发一些重要知识点.pdf》由会员分享,可在线阅读,更多相关《2023年Android开发一些重要知识点.pdf(96页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、And r o i d开发网上的一些重要知识点1.an d r o i d 单实例运营方法我们都知道A n d ro id 平台没有任务管理器,而内部A p p 维护者一个ActMty histo r ys tac k 来实现窗口显示和销毁,对于常规从快捷方式运营来看都是s tartActivity也许会使用 F LAG_ACTI VITY_NEW_TASK标记来打开一个新窗口,比如L a uncher,所以考虑单任务的实现方法比较简朴,一方面A n droid 12 3 纠正下大家一种错误的方法就是直接在and r oidm a n i fest.xml 的 a p plic a t i o

2、 n 节点中加入 and r oid:l a un c h M o d e=sin g I e I nstanc e 这句,其实这样将不会起到任何作用,Ap p s 内部维护的历史栈作用于Activ i t y,我们必须在 act i v i ty 节点中加入 a ndr o id:launchMode=s i n glelnst a nee这句才干保证单实例,当然一般均加在主程序启动窗口的Activity。2.px像素如何转为dip设备独立像素最近有网友间如何将px像素转为dip独立设备像素,由于A n droid的设备分辨率众多,目前主流的为wv g a,而很多老的设备为hvga甚至低端的

3、q v g a,对于兼容性来说使用di p 无非是比较方便的,由于他和分辨率无关和屏幕的密度大小有关,所以推荐使用。px=(i nt)(d ip*d e nsi t y+0.5 f)这里a ndroid开发网提醒大家很多网友获取density(密度)的方法存在问题,从资源中获取的是静态定义的,一般为1.0 对于HVGA是正好的,而对于wvg a 这样的应当从Win d o wsMa n ag e r 中获取,WVGA为 1.5 这里可以再补充一下di p,s i p 的知识3.Androi d 中动态改变I mageView大小很多网友也许发现在1 ayou t.xm 1文献中定义了 Imag

4、eVi e w 的绝对大小后,无法动态修改以后的大小显示,其实Android平台在设计U I 控件时考虑到这个问题,为了适应不同的Drawa b 1 e 可以通过在x m 1的相关Im a g e View中加入andro i d:s c a I eType=fitXY这行即可,但由于使用了缩放也许会导致当前U I 有所变形。使用的前提是限制Im a geV i e w 所在的层,可以使用-一个内嵌的方法限制显示。4.如 何判断A n d ro i d 手机当前是否联网?假如拟开发一个网络应用的程序,一方面考虑是否接入网络,在 Android手机中判断是否联网可以通过Conn e cti v

5、i tyMan a g e r 类的isAvai 1 a ble()方法判断,一方面获取网络通讯类的实例 Conne c t i v i tyM a n a gercwjMana g e r=(Connectiv i t y Manager)getSyst e mServi c e(Context.CONNECTIVITY_SER VICE);,使用 cwjMa nage r.g e t Activ e Ne t wor k lnfo().i s A v ailab 1 e();来返回是否有效,假如为 True则表达当前An droid手机已经联网,也许是W iF i或 GPRS、HSDPA等

6、等,具体的可以通过C o n n e c tivi t yMa n a g er 类的 getActi v e Netw o r klnfo()方法判断具体的接入方式,需要注意的是有关调用需要加入这个权限,an droid开发网提醒大家在真机上Mark e t和 Browse r 程序都使用了这个方法,来判断是否继续,同时在一些网络超时的时候也可以检查下网络连接是否存在,以免浪费手机上的电力资源。5.Drawable、Bitmap、C a nvas 和 Pain t 的关系很多网友刚刚开始学习And r o id平台,对于D r awa b Ie、Bitmap、Canva s 和 Pain t

7、它们之间的概念不是很清楚,其实它们除了 Drawa b le 外早在Sun的J2M E 中就已经出现了,但是在Android平台中,Bitmap Canva s 相关的都有所变化。一方面让我们理解下An d ro id平台中的显示类是Vi e w,但是还提供了底层图形类andro id.graphi c s,今天所说的这些均为graphi c s 底层图形接口。B i tmap-称作位图,一般位图的文献格式后缀为bmp,当然编码器也有很多如RGB 5 65、RGB888。作为一种逐像素的显示对象执行效率高,但是缺陷也很明显存储效率低。我们理解为一种存储对象比较好。Drawable-作为And

8、ro i d 平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、J P G,当然也支持B M P,当然还提供一些高级的可视化对象,比如渐变、图形等。Canvas-名为画布,我们可以看作是一种解决过程,使用各种方法来管理Bitmap.G L 或 者 Pa th途径,同时它可以配合Ma t rix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪、选取等操作。P a int-我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。假如涉及一些Andro i d 游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。6.Act i v

9、ity切换导致的o n C re a t e 反复执行部分网友会发现A c t ivit y 在切换到后台或布局从横屏L ANDSCAP E切换到POR TRAIT,会重新切换Activity会触发一次onCreat e 方法,我们可以在and r o idm a nifes t.xml中的 activ i t 元素加入这个属性 a ndroi d:c onf i g Ch a n g e s=orientation|keyb oardHi d d en 即可,比如 vac t i v i ty andro id:nam e=and r o i d 123 a nd roi d:conf i

10、g C hange s=no r i e ntati o n|ke y boa r dHidden a n droi d:label=s tring/app_ name”,同时在 Activi t y 的 J ava 文献中重载 onCo n f i guratio n Cha nged(C o nf i gura t i o n n e wCo nfig)这个方法,这样就不会在布局切换或窗口切换时重载onCre a te 等方法。代码如下:j a va view pla i n c opyp r i nt?1.Ove r ride2.p ubl i c v o id onConfi g u

11、r ationChan ged(Configuratio n newC o n fi g)3.(4.su p e r.onCon f i g u r ati o n Chan ged(newCo nfig);5.if(this,g e tRe s ources().g e tC o n f igur a t i o n().o r ie n t ation=C o nf i gur a t i on.OR I ENTATION_LANDSC APE)6.(7./land8.)9.els e if(th i s.get R e sour c es().ge t Con f igurat i on

12、().orie n t ati on=Con f i gu r atio n.ORI E NT A TION_PORT R A IT)10.11./p o r t12.13.7.And r oid 的 ImageBu t ton 问题很多网友对And r oid提供的ImageButton有个疑问,当显示Drawab 1 e 图片时就不会再显示文字了,其实解决的方法有两种,第一种就是图片中就写入文字,但是这样解决会增长程序体积,同时硬编码方式会影响多国语言的发布。第二种解决方法很简朴,通过度析可以看至U Ima g e B ut t o n 的 layout,我们可以直接直接继承,添加一个T

13、e xtv i e w,对齐方式为右侧即可实现ImageButton支持文字右侧显示。8.Andro i d 代码优化技术1.J a va 内存控制 对于字符串操作而言假如需要连加这样的操作建议使用Str i n g Bui Ider,通过调试不难发现假如你的字符串每次连加,使用Strin g 需要的内存开销会远大于Strin g Builder,然后And r o id 手机常规的运营内存大约在12 8M B左右,对于运营多任务就需要考虑了,Android开发网提醒由于J av a 有G C 不需要手动释放那么分派的时候就要格外的小心,频繁的GC操作仍然是很影响性能的,在调试时我们可以通过l

14、ogcat查看内存释放情况。2.循环使用平时在访问一个属性的时候效率远比一个固定变量低,假如你的循环估计次数经常大于5,假设xxx.GetLength()方法的值一般大于5,推荐这样写,比如 f o r (i nt i=0;i x x x .Ge t L e ng t h();i+)这里 xxx.GetLen g th 在每次循环都要调用,必然会影响程序效率,在游戏开发中显得更为明显,改善的方法应当为intj=x x x.GetLe n gth()f or(i nt i=0;i j;i+)3.图片的优化 在 Android 平台中2 维图像解决库Bitmap F a c to ry 做的比较智

15、能,为了减少文献体积和效率,经常不用很多资源文献,而把很多小图片放在一个图片中,有切片的方式来完毕,在 J2M E 中我们这样是为了将少文献头而解决MIDP这些设备的问题,而 Android中虽然机型硬件配置都比较高,有关And roid G1硬件配置可以参考G1 手机参数以及评测,但是当资源多时这样的运营效率还是令人满意的,至少Da 1 vik优化的还不是很够。9.And r o id 开发进阶之NIO非阻塞包(一)对于Andro i d 的网络通讯性能的提高,我们可以使用J a v a 上高性能的NIO(N ewI/O)技术进行解决,N IO 是从JDK 1 .4开始引入的,NI。的 N

16、我们可以理解为Noblockin g 即非阻塞的意思,相相应传统的I/O,比如So cket的 accpet()、re a d。这些方法而言都是阻塞的。NIO重要使用了 C h a n n e l和 Selec t o r 来实现,J a va 的Sel ector类似Wins o ck的 S e le c t模式,是一种基于事件驱动的,整个解决方法使用了轮训的状态机,假如你过去开发过Symbian应用的话这种方式有点像活动对象,好处就是单线程更节省系统开销,N 1。的好处可以很好的解决并发,对于An droid网游开发来说比较关键,对于多点Soc k e t连接而言使用NIO可以大大减少线程

17、使用,减少了线程死锁的概率,毕竟手机游戏有U I 线程,音乐线程,网络线程,管理的难度可想而知,同时I/O这种低速设备将影响游戏的体验。N I O 作为一种中高负载的1/0 模型,相对于传统的B IO(Block i ng I/O)来说有了很大的提高,解决并发不用太多的线程,省去了创建销毁的时间,假如线程过多调度是问题,同时很多线程也许处在空闲状态,大大浪费了 CPU时间,同时过多的线程也许是性能大幅下降,一般的解决方案中也许使用线程池来管理调度但这种方法治标不治本。使用NIO可以使并发的效率大大提高。当然N IO 和 JDK 7 中的A IO 还存在一些区别,A I 0 作为一种更新的当然这

18、是对于Java而言,假如你开发过Wins o ck服务器,那 么 10 C P 这样的I/0 完毕端口可以解决更高级的负载,当然了今天Androi d 123重要给大家讲解下为什么使用N I 0 在 An d r。i d 中有哪些用处。NIO我们分为几个类型分别描述,作为J a v a 的特性之一,我们需要了解一些新的概念,比如ByteB u f f er类,C hannel.S oc k etChan n el,Serve r S oc k etChannel,Sei e ct o r 和 Selection Key。有关具体的使用,And r。i d 开发网将在明天具体讲解。网友可以在An

19、d r o id S D K 文档中看下j a v a.n i o 和 jav a.nio.c h an n el s 两个包了解。了解下这种技术,看看在立即要做的项目中是否用得到10.Android T h em e和 Sty 1 e s 内部定义解析昨天我们讲到的有关在Andr o i d Manif e st.xml中定义A c tivity的 t h e m e 方法来实现无标题的方法,在便用xml让你的A c tiv ity 无h 一文中讲到的,很多网友不明白为什么这样做淇实在And r。id 123以前的文章中多次提到了 styles样式定义方法,今天Android开发网再次把一些

20、网友回顾了解下an droid样式的内部定义。在一个工程的re s/v al u es/theme.xm 1 中我们可以方便的定义自己的风格主题,比如下面的cwjTheme中我们使用了基于andr o i d 内部的白色调的背景Theme.L i ght,设立windowsNoTItle为 t ru e 代表没有标题,背景颜色我们使用了 and ro i d 内部定义的透明,同时设立I i stView控件的样式为cwjListVi e w,x m l样式代码如下:html v iew plain c opyprin t?1.2.3.4.true5.a ndr oid:color/tr a n

21、spar e nt6.sty 1 e/c wjListVi ew7.有关ListView控件我们自定义的风格就是修改下系统1istview这个控件的每行分隔符样式,这里我们在工程下res/d raw a bIe文献夹下放一个图片名为list_ s e le cto r 图片,这样我们的cw j Li stVj e w 的代码可以这样写style n a me=cwjListView”parent=Man d roid:s t y 1 e/Widget.Lis t Views8.dr a wable/lis t _s elec t or9.10.通过定义sty I e 可以设立更多,比如让cwj

22、ListV i ew 的字体颜色就加入textAppearance属性,比如a n d roid:style/TextAppeara n c eA 1 I.Andr o i d JSON解析示例代码来自Goo g Ie官方的有关Androi d 平台的JSON解析示例,假如远程服务器使用了 j son而不是xm l的数据提供,在A n droid平台上已经内置的org.j s。n 包可以很方便的实现手机客户端的解析解决。下面An droid 123 一起分析下这个例子,帮助Androi d 开发者需要有 关 H T T P 通讯、正则表达式、J S O N 解析、appWidget开发的一些知

23、识。Ejava view p lainc o pypri n t?1.publ i c c I a ss WordWidget ext e n d s Ap p WidgetP rovid er /appWi d g et2.O v e r r id e3.p u blic v o id onUpdate(C onte x t context,A p pWidge tManager a P pWid g etM a nager,4.int L a ppWidgetlds)5.c o nte x t.startServi c e(new Inte n t(context,U p dateSe r

24、v ic e.c 1 a s s);/避免ANR,所以Widget中开了个服务6.publi c s t a tic c la s s Upd a t eSer v i c e e x ten d s Ser v ice 7.Over r id e8.public vo i d o n Start(lnte nt in t ent,int s t ar t Id)9./Build the wi d get upd a te for t o day10.R e mote View s u pdat e Views=b u i I d Upda t e(t his);Com p onen t Na

25、m e thi s W i dget=n e w C o m ponen t Nam e(th i s,Wo r d W i d g e t.c 1 a s s);11.A p pWidg e t Manager man a ger=AppWj d getM a nager.ge t Ins t ance(this);12.m a nager.up d a te A p p W i dge t(th i s Widget,u p date Views);13.public RemoteVi e ws b u i 1 dUpd a t(Context context)14./Pic k out

26、mont h names from r e sources15.Re sou r ces r e s=context,g etReso u r c e s();16.Stri n g mon t hNam e s=re s.g e t Strin g Ar r ay(R.arra y.month_names);Time today=new Time();17.t oday.s etT o Now();Str i n g pa g eN a me=re s.g e t Str i n g(R.s tring.t em p 1 at e _wotd_t i tie,18.m o n t h Nam

27、est o da y.month,to d ay.mo n thD ay);19.R e mote V i ews updateVi e ws=null;20.String p a geCo ntent=,m;t ry 21.S impleWi k iH e Ipe r,p r epareU s erAge n t(c ont e xt);22.pag e Content=S i m p leWi k i Help e r.g e tPag e Cont ent(p ageNam e,fals e);23.catch(ApiE x ce p tion e)24.Log.e(nWor d W i

28、 d get,Cou 1 dn*t cont a c t APIM,e);25.cat c h(P a rs e Exception e)26.Log.e(W o rdWidg e tn,Couldn,t parse AP I res p on se,e);27.Pa t tern p a tt e r n=Patt e p i 1 e(S impleWikiHelpe r.WO R D_OF_DAY_REGEX);正则表达式解决,有关定义见下面的SimpleWikiHelper类28.Ma t che r mat c h e r=pat t ern.mate h e r(pa g eCo n

29、tent);29.if(matche r.fi n d()30.u p d a te V ie w s=new R em o t eV i ew s(con t ex t.ge t P a c k a g eName(),R.I a y o ut.wid get_wo rd);St r i n g wordTit 1 e=match e r.g roup(1);31.upd a teVi e ws.s et T e xtVi e w T e x t(R.id.w o rd _ tit1 e,wordT i tl e);32.updateViews.setT e xtv i ew T ex t(

30、R.id.wordjype,mateh e r.group(2);33.upd a teV i e ws.setT e xtViewT e x t(R.i d.d e f i nit i on,m a tch e r.g r o up(3).trim();S t rin g d efinePa ge=r es.ge t String(R.string,t empl a t e_de f i n e_u r 1 ,34.Uri.e ncode(wordTi t 1 e);35.In t en t def i ne I nten t=new I nte n t(l n tent.ACT ION_V

31、 I EW,Ur i.parse(d e fin ePage);这里是打开相应的网页,所以U ri是 http的 u rl,a c tio n 是 v ie w 即打开web浏览器36.Pend i ng I nte n t pend i nglntent=Pendi n glntent.getActivity(conte x t,37.0/*no re q uest C ode*/,d e fin e Intent,0/*n o f Iags*/);38.u p dat e V i ews.setOn C 1 ickPen d i n gin t ent(R.id.w i dg e t,pe

32、ndi ngl n tent);/单击 Widget 打开 Ac t ivity eIse(39.upd a teViews=n ew RemoteView s(c on t e xt.ge tPackageN a me(),R.layout.wi d get_me s sa g e);40.CharSeq u e nee errorM e s s a ge=c o n t ext.g e t Te xt(R.s tring.w i d get_erro r);41.up d at e View s,s e tTextViewTe x t(R.id.m e ssage,er r orMess

33、a g e);42.)43.retur n upda t eView s;44.Over r i d e45.publ i c IB i nder onB i nd(I n tent i n t e nt)46./W e do nt ne e d t o bi n d to thi s service47.r eturn n u ll;48.49.50.有关网络通讯的实体类,以及一些常量定义如下:P ubli c class S i mpleWik i Helper 51.p r i v ate static final S trin g T A G =nS imp 1 eW ikiHelpe

34、r;p u blic s ta t i c f i nal String WORD OF_DAY_REGEX=52.H(?s)wo t d|(.+?)|(.+?)|(#|+).*?;p r iv a te static f i nal St r ing WIKTIONAR Y_PAGE=53.H+54.rvp r o p=cont e n t&format=js o n%s n;p r ivat e stat i c f i nal String W I KTIONARY_EXPAND_TEM PLATES=55.&r ve x pand t emplates=tru e M;p r i v

35、a t e sta t i c fina I i n t HTTP_STATU S_OK=200;p rivate st a ti c b yte sB u ffer=n e w byt e 512;p r ivat e stati c String sU s erAgent=null;public static c I a ss Ap i Exce p tion exten d s Exce p t ion 56.publ i c Ap i Exce p tion(S tring de t ailM e s sage,Throw able t hr o wa b I e)57.su p e

36、r(det a ilMe s sage,t hr o wa b 1 e);58.public A piE xc e ption(Strin g detaiiMessage)59.super(detailMessag e);60.)61.p u bl i c st a t i c cla s s ParseExc e p ti o n e x te n d s E xception 62.pu blic P a r seEx c eption(Str i n g d e ta il Message,Throwabl e thro w able)63.sup e r(d etail Mes s a

37、ge,thro wab 1 e):64.)65.pub 1 ic s t at i c v o id pre p areUserAgent(C o n t e x t c o n text)66.try 67./Read pac kag e nam e and v e r sion number f rom man i fest68.P a c k a g e Manager m a n ager=c ontext.getPackageM a nag e r();69.Pa c kagelnfo in f o=man a ge r.ge t Packagein f o(context.ge t

38、 Pac k a geN a me(),0);70.sUserAg e n t=Strin g.form a t(co n text.ge t S t rin g(R.string.t e mplat e_u s er_agent),71.inf o.p a ckageName,info.vers ionName);catch(Nam e NotFound E x ceptio n e)72.Log.e(TAG,*C o uldnt f i n d p a ckage in f o rma tion in Pa c k ageM a n ager”,e);73.74.publi c stati

39、c S t r i ng g etP a g eCo n tent(Strin g ti tIe,b ool e an e x p a n d Templa t es)75.th r ows ApiExce p tio n,Par s e Exc e p tion 76.String e n codedTi t Ie=Uri.en c o de(ti t i e);77.St r i ng ex p andCI a use=expandTem p 1 a tes?WIKTIONA RY_EXP AND_T EMPLATES:S t ring content=getUrlC o ntent(S

40、tr ing.fo r mat(WIKTIONARY_PAG E,en c od e dTitle,e x pan d C lause):78.t r y 79.JSON 0 b j ec t respon s e=new JSONO b ject(conte nt);80.J SONOb j ect q u e ry=re spons e.getJSONObje c t(Hquery );81.J SONObject pages=q u e ry.getJS O N O bjec t(page s);82.J SONObj e c t pag e=p a ges.get J SONObj e

41、 ct(String)page s.ke y s().next();83.J S ONArra y re v i sions=p a ge.g e t J S 0 NArray(re vi s i o n s”);84.J SONO bject r e vi s ion=r ev i s i ons.getJSONO bject(0);85.return revision,ge t S t r ing(*);86.c a t c h(JSONE xcept i o n e)87.th r ow new ParseExc e pt i o n(*Prob 1 em p a r s i ng AP

42、I r e s pon s e e);88.)89.p rotected st a tic s y n c hroniz e d St r ing getU r ICon t ent(Str ing u r I)th r ows ApiE x cep t io n 90.if(s U s e rA g e nt=null)91.t hro w new ApiExce p tion(U se r-A g e n t st r ing must be pre p ared);92.Ht t pCIie n t cl i en t=n e w De f aultH t tpCIi e nt();93

43、.Ht t pGet request=new H t t p Get(ur 1);94.request.setHea d e r(HU s e r-Agent*,sUserA g e n t);/设立客户端标记 try(95.HttpR e sp o n s e response=die n t.execute(reque st);Sta t usLi ne st a tu s=r espon s e.getStatusLine();96.if(st a tus.g e t s t at u sCode()!=HTTP_STATU S_OK)97.throw new Api E xceptio

44、n(I n v alid r e spon s e from ser ve r:M+98.statu s.t o St r i n g();99.HttpEnt i ty e n tity=re s po n se.get E nt i ty();100.Inputs t r earn i nputStream=ent i t y.g e tConte nt();/获取H T T P返回的数据流 ByteArra y O u t p utS t re am co n t e nt=new By t eArrayOutputStream();int r eadB y tes=0;101.whil

45、e(re a d Bytes=inputstream.re a d(sBuffe r)!=-1)102.con t e nt.write(sBuffer,0,r eadBytes);/转化为字节数组流103.return new Str i ng(con t e n t.toBy t e A rra y();从字节数组构建S t ring104.catch(IO E xcep t i o n e)105.thr o w new A p i E x cep t ion(HPr o blem c o mm u n i ca t i ng w i th API”,e);106.107.108.关整个

46、每日维基的wid g et例子比较简朴,重要是帮助大家积累常用代码,了解An d roid平台 JS O N 的解决方式,毕竟很多S e ver还是Jav a 的。1 2.Andro i d 中使用定期器T i merTas k 类介绍在 Android平台中需要反复按周期执行方法可以使用J a v a 上自带的TimerT a sk类,Time r T a s k 相对于Thread来说对于资源消耗的更低,除了使用A n droid自带的AlarmMan a g e r 使用T im e r 定期器是一种更好的解决方法。我们需要引入 im p o r t ja v a.u t il.T i

47、me r;和 impo r t ja v a .util.Tim e rTa s k;java view p 1 aincopyprint?1.p r iv a t e Timer mTimer=new Timer(true);2.private Tim e rT a s k m T im e r T a sk;mTime r T a sk=new Ti m e r T a s k()3.(4.public void run()5.(6.Log.v(nandroid 1 2 3 n,cwjH);7.)8.);9.10.11.12.mT i mer.schedul e(mTimerTas k,5

48、000,1000)/在 1秒后每5 秒执行一次定期器中的方法,比如本文为调用log.v打印输出。假如想取消可以调用下面方法,取消定期器的执行 while(!m TimerTask.cance 1 ();13.mTimer.cance 1 ();最后Android123提醒大家,假如解决的东西比较耗时还是开个线程比较好,Timer还是会阻塞主线程的执行,更像是一种消息的执行方式。当然比Handle r 的 pos t Del a y 等方法更适合解决计划任务。14.15.16.1 3.An d ro i d 应 用 I con大小在不同分辨率下定义v /P17.vBLOCKQUOT E 对于An

49、d r o id 平台来说,不同分辨率下I con的大小设计有着不同的规定,对于目前主流的H D PI即 WVGA级别来说,通常hdp i 的应用i co n 大小为72x72,而标准的mdpi即 h v ga为48x48,对于目前HTC和 Mo t o rol a 推出的一些QVGA的使用了 1 dpi,图标为3 2 x32,常见的A n d ro id 图标大小设计规范如下表所示:18.Launcher19.3 6 x 36 p x 20.48 x 48 px21.7 2 x 72 px Menu22.3 6 x 36 px23.4 8 x 48 p x24.72 x 7 2 p x St

50、atu s Bar25.24 x 2 4 px26.32 x 3 2 px27.48 x 48 p x T a b28.2 4 x 24 px29.3 2 x 32 px30.48 x 4 8 px Di a log31.2 4 x 24 px32.32 x 32 px33.4 8 x 4 8 px L i st V i ew34.24 x 24 px35.32 x 3 2 px36.48x48 px对于android界面设计的安全色,如下表 而对于系统自带默认程序的图标,下面为png的透明格式,直接鼠标右键另存为即可37.38.39.v p 看看sdk文档上的关于界面图标的具体说明。14.A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁