eoeandroid特25第二十五期应用终端适配_第1页
eoeandroid特25第二十五期应用终端适配_第2页
eoeandroid特25第二十五期应用终端适配_第3页
eoeandroid特25第二十五期应用终端适配_第4页
eoeandroid特25第二十五期应用终端适配_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一.APP性能之终端兼容优化——by二.APP性能之终端兼容优化——by诗帆三.APP性能之终端兼容优化——by承影四.APP性能之终端兼容优化——by游戏五.APP性能之终端兼容优化——bycangely六.APP性能之终端兼容优化——by七.APP性能之终端兼容优化——八.APP性能之终端兼容优化——bytangke300九.APP性能之终端兼容优化——by冰灵十.APP性能之终端兼容优化——byyava555十一.APP性能之终端兼容优化——by没文化十二.APP性能之终端兼容优化——byChengChangmu十三.APP性能之终端兼容优化——byhoushijie3十四.APP性能之终端兼容优化——by离开十五.APP性能之终端兼容优化——bysfshine十六.APP性能之终端兼容优化——byyado十七.APP性能之终端兼容优化——by1:Android多屏幕适配介绍附录2:Android屏幕适配户们在拥有了终端选择的同时,却很少有人会知道开发APP的程序员们为此付出的心酸——Android的 用能正常运行在的终端设备上。Geek行动-APP性能终极优化之如何提高终端适配率》活动中的一段宣“Android太碎片!终端千千万,俺们程序猿and程序媛好辛辛苦苦勤勤恳恳熬夜玩命开发一个APP,除了想创意搞美工,尼玛还要去看市面上那些终端能不能安装的了,如果大部分能装,那就算对苦的奋斗有了一个丝应该有的“但是现实很骨感,只有一个:那就是,没有哪个Android系统上的APP所以本期特将针对android碎片化而产生的如何解决终端适配优化问题。特内所用文章主要来自活动所产生的优秀内容,最大程度的保留了社区网友们作品的原汁原味,故读者们特最后一部分附录为社区特约Android开发大神留有同学为大家精心准备的大礼,内容主要采自Android,精心翻译而成。在此向留有的大力支持表示感谢!本期特在校稿阶段得到了eoe社区团队诸位热心网友的指正,因为人数太多,在此一 往期特地址 eoandroid开发者社区活跃会员,现在在一家刚起步的软件公司担任软件工程师,ndrod应用开发,其实是个菜鸟,会的东西不是很多,但自认为Jaa的面向对象设计思想和VC计想,对设模感,以直在持也一在慢看过《三个傻瓜》之后,有一种信念让拥有一技之长,在一次偶然的机会中后来,2011年下半年开始学Android,再然后,就一直到了现在!承影,山东,在校大三学生党一枚。主修java语言。有扎实的java基础和优秀的设计 作安卓,一度梦想成为很牛的android程序员,常进取,爱学习,本文 猪猪,想必你也知道,Android平台的终端至少有千种之多,各个版本的系统都有,2次开发改造的系统,版本确实不少;而且分辨率也相当分散,并不像哪么集中.2、Android的解决方案.3、与ScrollView的结合.6、9patch工具的使用.在3个drawable文件夹下面分别放置高密度、中等密度和低密度的此外,需要说明的是:可以只在文件夹drawable_hdpi下面放置一密度的 ,进行放大操作,会显的很模糊.谢谢.注:工程test_demo_01的源代码见附件.testdemo01.zip(6.55MB,按住ctrl点 接下来开始在layout文件夹中设计布局.<LinearLayoutxmlns:android="http://s android:orientation="vertical">android:text="与ScrollView结合的布局"/>>附源代码testdemo02.zip(1.71MB,按住ctrl点 采用HTML5和CSS3制作界面,然后在WebView视图上进行显示,然后通过JavaScript进行的交互是一<metaname="viewportcontent="width=deviceuser-scalable=0;"2、可以设置不同的CSS级联样式表,来适应不同宽度的屏幕.HTMLUI.zip(103.68KB,按住ctrl点 该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中.其值越小,则对应的layout_widthlayout_height的优先级就越高,一般横向布局中,决定的是layout_width的优先级;纵向布局中,决定的是layout_height的优先级.先看下面的styles(style_layout.xml)<style<item<item<style<item<item<!--<item<!--<item<LinearLayoutxmlns:android="http://s 整个界面布局看起来非常直观,只是嵌套的逻辑要自己理下.显示效果如下图,480x800的界面,320x480的界面(后面的图也如此),可以看出显示比例和代码中完全一致,我就不多说了,大家对照下部分屏幕的宽度或高度都是80的整数倍(个别特殊的除外),不同的等分在不同的分辨率中设定不同的尺寸值.<LinearLayoutxmlns:android="http://s margin这样的值也用到了自定义尺寸,如果这个marginlayout_weight来控制的话,无疑要多嵌套一层线性布局,所以说没有一个方法是十全十美的,这第2个方法有时候用起来反而还要方便一些)也许很多人会这种方法,因为即使是也是推荐使用xml的方式写布局.不过我们在这不会像Swing那样写那么多麻烦的布局代码,因为我们只是在代码中重新设定控件的宽高度而已,xml布publicclassConstantpublicstaticintdisyWidth;//屏幕宽度publicstaticintdisyHeight;//屏幕高度}DisyMetricsdisyMetrics=newDisyMetrics();Constant.disyWidth=disyMetrics.widthPixels;Constant.disyHeight=disyMetricsheightPixels;<LinearLayoutxmlns:android="http://s //第一个按钮,宽度100%,高度10%LinearLayout.LayoutParamsparams=new(int)(Constant.disyHeight*0.1f+0.5f));//第二个按钮,宽度100%,高度30%LinearLayout.LayoutParamsparams2=new(int)(Constant.disyHeight*0.3f+0.5f));LinearLayout.LayoutParamsparams3=newLinearLayout.LayoutParams((int)(Constant.disyWidth*0.5f+0.5f),(int)(Constant.disyHeight*0.2f+0.5f));//LinearLayout.LayoutParamsparams4=newLinearLayout.LayoutParams((int)(Constant.disyWidth*0.7f+0.5f),本文 的的QVGA=320*WQVGA=320*WQVGA2=400*WQVGA3=432*HVGA=480*VGA=640*WVGA=800*WVGA2=768*FWVGA=854*DVGA=960*PAL=576*NTSC=486*SVGA=800*Web网页开发计意图,这个前提是布局里的单位是dip。也算是一种创意吧。layout_weightlayout_weight值,默认为零,意思是需要显示多大的视图就占据多大的屏幕空间。若赋个高于零的值,则将父视图中的可用空layout_weightlayout_weight值和在其它视图屏幕布局的layout_weightlayout_widthfill_parent时,对于一个组件,layout_weightfill_parent。的宽度相对于其它组件越小。但最小不小于wrap_content。androidHTML5CSS3WebView视图上进行显示,然后通过而且现在已经有比较成开发平台使用HTML5+CSS3+JavaScript+Rexsee扩展的API。其号称即使不神奇的是现在的JQuery也出了 androidwebjQuery。力挺!!!性才是app的王道啊。inflateActivity中布局是个有性能消耗的过程。每增加一个嵌套的布局和视图都会对应用的性能造都不要在一个布局中包含超过80个视图,否则,消耗在inflate操作上的时间会很大。套限制在10层以下是好的实践。 以下是网友总结的三星i9100运行游戏时候出现的情况:)))《速度与5》(FastandFurious5)——看到标题画面后就退《达》(Avatar)——所有物体都变成白)))《之城》(Gangster)——所有物体都变成白)))本文 很多人都尝试在屏幕设配上,找出一条通用的解决方案,可惜的是,就算是也没法提供这样的帮助,更别说我们这些苦的程序员,这里有个小故事,大家都知道,android版吧,有个采访,的初始人就说,天收到最多的用户反馈就是为什么不能在他的android上运行,但是,我已经设配了几百个android幕!买可没有人会说”你好,我要一个Normal大幕,密度最好是hdpi的”.这是一个帮助我们优化view的非常重要的工具的,接下来的大部分时间,都会借住这个工具进行讲解,这个工具沉睡在androidsdk tools下hierarchyviewer.bat,或者用Everything这样的搜索硬盘的工具直接找到!这么一就是我们一个o,World项目的View布局结构,在HierarchyViewer上你点击每个按钮就会有非常详细的布局信息,所以,hierarchyViewer的介绍到此为止!关于这个工具的详细使用,DebuggingandProfilingUserInterfaces这里不做赘述!应该是每个android开发程序员的!!android:gravity="center"><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:text="@string/back"/><ImageViewandroid:id="@+id/imageView1"android:layout_width="wrap_content"android:src="@drawable/header_back"/>我们从这个图中,我们可以看到,view的三个节点去完成!假设,view个人建议,常用的Widget的所有参数都尽量了解一遍!在阅读文档的时候我们发现了Button,有一个可以<Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/btn_headtita"android:text="@string/back"android:textColor="#ffffff"/>3N级复杂度的布局,变成了一个N级复杂的!所以,我建议各位android开发朋友,在考虑优化的时候先把api文档里面的内容烂熟与心,不然,这样折腾下去,很浪费时间! 所谓,模块化布局就是要你熟悉使用<include/>这个 <LinearLayoutxmlns:android="http://s /apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical">在高效布局里面,有一条准则就是,尽量的减少节点!!!!如同,我们发现,其实LinearLayout其实啥都没干,我们却 <Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:drawableLeft="@drawable/header_back"android:gravity="center"android:layout_gravity="center_vertical|center_horizontal"android:padding="10dp"android:text="@string/back"android:textColor="#ffffff"/>讲了,这么一大堆东西,貌似,没怎么如何去优化?都是在说一些操作性的东西,其实,这世上没有优化方减少复杂度,往往,兼容问题的出现,就是布局太复杂了,例如,我举的那个按钮布局,本来一个View就能完成,view完成,在使用的时候,出现问题的概率也大幅度提升!所以,布局以简单为本,那样兼容问题就可本文 这是关于不同分辨率的Android设备的适配的一些个人想法,欢迎拍砖.另外,所有的组件都没有写在XML布局文件中,都是java代码创建的.1,使界面看起来合理,没有不合常理的情况出现.由于android系统自动适配的不确定性,可能使画面出现的错误,比如下面图中的错误,木牌本应挂在柱子上,在自动适配中可能出现这种情况,这就是不合常理的情况,也是必须要避免的.2,使界面看起来更舒服.界面的元素不能有变形,各个元间的距离和元素在屏幕的坐标位置也要设计合理.由于之前的项目用到的太多,如果考虑高、中、低三种分辨率用各自的,虽然适配稍微容易些,但会使最终的APK臃肿无比,所以我考虑的就是使用一套,来适配所有的分辨率.适配不应该仅仅是技术方面的工作.产品策划/UI的设计,技术负责实现,这似乎没有什么太多可讲的东西.但是如果在项目正式开发初期,能够确定UI的基本方案,就可以在适配这个环节上节省大量的工作时间.接上一步,两个问题可以这样解决.将柱子和3个木牌看成一个整体,确定他们的位置关系,最好能用矩形表现出来.这三个等高的小矩形,每个矩形居中放一个木牌,这样就形成了一个整体.在适配时,仅对这个整体的坐标位置和宽高尺寸做调整,在任何分辨率中都不会出现木牌没有挂在柱子上的错误.UI修改时,应该在修改方案确定后,由产品经理/策划/美工尽快提供需要修改的坐标值,例本文 Andorid的特性注定了我们开发者要为其在各种终端上的兼容伤透脑筋,但任其终端兼容再复杂再麻烦,作为幕相对角测量得出,为了简单起见,android将其定义为四种屏幕大小:small,normal,large,andextralarge.屏幕密义成四种:ldpi,mdpi,hdpi,andxhdpi.低密度(ldpi中密度(mdpi高密度(hdpi(320xhdpi)幕QVGAHVGAWXGA且传统意义我们也将这几种分辨率的屏幕作为其所代表的dpi的屏,也就意味这我们如果适配这几种屏,会适配80%左右的机器.对于界面如何设计我没有多少发言权,UE设计的界面,好的界面咱就不说了,我观,但是给适配带来了极大的,因为很容易出现线与线接不上的问题,虽然最终还是解决这些问题,但却花费了大量精力在微调布局上.所以说好的界面设计可以让以后的适配事半功倍.至于怎么设计界面,详见/design/index.html.确的解释,个人感觉以MDPI为基准有两点好处(个人观点):更容易确定大小,因为在这个dpi下的dp=px(像素、dp转化:px=dp*(dpi/160)),毕竟美工是理与LDPI为基准就有可能在HDPI上正文部分显示区域又过大.在android适配中像素其实是很不靠谱的,而dpsp一般情况下比较适用,因为是比例单位,并且尽量在一开可能不止一个人9.png的使用,的确它是非常好用的,不仅可以降低的大小,而且可以在适配中做到相当好的作用,因为它可以指定拉伸的区域,具体怎么做9.png网上一大堆,就不细说了.一开始我就说每个人有适合每个人的兼容,这个属性对于那些喜欢相对布局的人可能用处不大了,但是喜欢线性布局的人,可以说是适配的layout_weight="1"和layout_width="fill_parent",这样主要固定住选项卡与底层状态栏中间部分是自适应的.<LinearLayoutxmlns:android="http://s android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ffffff"><LinearLayoutandroid:orientation="horizontal"android:layout_height="fill_parent"android:layout_weight="1"/>android:layout_height="fill_parent"android:layout_weight="1"/>android:layout_height="fill_parent"android:layout_weight="1"/><LinearLayoutandroid:orientation="horizontal"android:layout_weight="1"android:background="#ff00ff"><LinearLayoutandroid:orientation="horizontal"起到了很大的作用,并且在适配与平板之间也有类似的功能,因为我们可以将布局组装成一套新的布局来适配平板,这和4.0上的fragment设计思想是很像的.不要在代码中选择使用单位,最好在资源中配置,但是如果一定得使用,dpdp其转换成像素来使intpxValue=(int)(dpValue*scale+0.5f);DisyMetricsdm=newDisyMetrics();intwidth=dm.widthPixels;前7步都是对传统意义上的屏幕适配的做法,但有了前7步并不一定可以真正适配所有机器,这就需要我们在对特殊屏幕时需要做特殊的处理,具体做法可能最终还是得写一些相对应的布局,放在相对应的layout下.本文 我原来做过几个软件,都遇到过兼容和分辨率问题,我用的机子是HTCONEX我家里人全部都是用的android(被我强制买的安卓,嘿嘿),其实也有私心,就是为了测试各种软件,我家里每个人的的分辨率2,建立好文件夹后,每个文件会对应一个分辨率,你需要对每个layout文件夹里的大小,位置,等一切3,如果上面的两步你都做好了,先别忙运行,AndroidManifest.xml里加上下面这段代码才能起作用,不<supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="true"android:smallScreens="true"/>下面再对大家一个软件优化的建议(其实也算不上市优化,就是减轻软件大小的方法而已),当一个成功的作品的时候,肯定会少不了有很多的,素材,和一些音频文件,但是如果放在drawabe里,会大大加深打包后软件的大小,所以建议大家把能放在网上的,尽量放在网上,(这里仅限单独的开发者,公司开发者我这里就不说了,我都是刚学习,还没那个能力,呵呵),然后从网络上出来再显示在程序上,关于网络在搜一下,一大把的!好了,到这里就完了,上面的一些如果有错误或不足的欢迎高手回帖补充,android没多久,大家互本文 Android设备适配.对开发者来说,也是除了应用逻辑以外需要重点考虑的一个重要因素.因为这点将会直接影响到用户对应用的印象和体验.对此也出了很多应对措施来解决Android的碎片化.①这点也许这是开发者遇到的最头疼的问题,Android,转投其他平台.其实这点并不可怕,为我们提供了很多resourcequalifier来解决此问题.根据不同分辨率,不同系统版本,不同屏幕尺寸,不同屏幕方向,不同语言,不同地区,UI的模式,sim卡也能匹配,具体请看下面resources.html都是对适配很有用的),详情见:/guide/topics/resources/drawable-resourcehtml<shape UI资源图,针对不同分辨率的屏幕drawable-ldpi,drawable-mdpi,drawable-hdpi是最常见的分辨率的.mdpi的设备用hdpi的资源,这样会造成消耗大量的内存,mdpi的设备都硬件配置都不layoutLinearLayout时,Viewandroid:layout_weight来自动排布,也是一个用作自适应不错的选择.就如下面代码:<LinearLayoutxmlns:android="http://s /apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent">当LinearLayout的android:orientation为horizontal时别忘了将含layout_weight属性的子View的layout_width0dp.vertical时,layout_weight属性的子Viewlayout_height0dp,这样可以减少LinearLayout在onMeasure时计算量.①说到版本兼容性,第一个想到的就要是用低版本sdk开发,这样在所有高于设备上正常运行.但是有个弊端就是无法使用Android高版本提供新特性.于是这个时候"AndroidCompatibilitypackage"就出场了,这个library是为低版本提供一些兼容高版本的特性,如Fragment,Vie ger等等,开发者可以在低版本的系统使用高版本的特性..androidminSdkVersion,android:minSdkVersion很好理解,就是该应用支持的最低apilevel的设备,android:targetSdkVersion则是用来区分是使用" 比如上面的代码,就是最低版本是apilevel7(Android2.1),apilevel低于11(Android3.0)就使用"AndroidCompatibilitypackage"提供的兼容类(Fragment),11(Android3.0)就使用3.0提供的.②还有个版本兼容性能用到的就是Java提供的反射机制,这样也可以使开发者的应用在某个方法可用的时候进行调用.这个可以通过查询开档进行查询.流程看下图:当然针对某些实例变量也能通过反射来改变,这个就需要去查询源码,不推荐UI①layoutopt-曾经作为独立的app于sdk/tools 中,高版本的sdk将他集成到ADT中了.主要功能检测你编写的layout中哪些View是无用的,哪些是可以两个合并到一个,达到相同的UI效果的.该工具报出如下警告.以便于开发者修改.具体大家可以下这个工具的用法5:22Theroot-level<FrameLayout/>canberecedwith<merge/>10:21ThisLinearLayoutlayoutoritsFrameLayoutparentisuseless-1:-1Thislayouthastoomanyviews:83views,itshouldhave<=,②hierarchyviewer-该工具位于sdk/tools 中.可以帮助开发查看自己应用View的结构和嵌套的层次,View,已经层级关系.开发者可以通过点击节点来获取此节点的当前状态图,同时节点下会有三个可能是红黄绿的圆点,分别表示你的这个View在measure,layout,draw所消耗的时间和其他50%View作对比.就如生活中的红黄绿灯一样的效果.绿色当然最好.①说到代码优化,这儿是我收集的一个表格14调用55调用HashMap的 调用HashMapput()根据表格,就知道应该避免做哪些不必要的操作了②在Android源码中也经常见到这样的写法,"将一个实例变量赋值给一个局部变量,然后用这个局部变量"(局部缓存),特别是在onDraw方法或者循环中.会经常用到.因为Java局部变量速度会比实例变量快.③尽量使用普通循环,而不是使用使用实现 ble接口的foreach循环.因为移动设备性能有限.I tor的hasNext()和next()方法,从上面表格可以看出调用方法,比属性更耗时本文 众所周知,在更新androidSDK的同时,也更新了许多更灵活的新功能,这些功能或多或少地会造成运另一方面目前大多数的安卓用户都是基于这两个ROM,所以兼容性也不错.这里推荐国内最著名的APPCAN开发平台htt /,不仅是全中文的开档,而且功能不输这个宅Max(http )是用discuz架设起来的,在appcan可以方便地找到对应的插件.整个本文 Android设备繁多,根据屏幕尺寸系统将设备分为小/中/大/极大四种类型,又根据屏幕密度将设备分为低密度/中密度/高密度/.因此,App要适配所有设备,4x4=16种情况,但实际上我们只需要考虑几种常见的机型就可以,例如WVGA800/WVGA854/WVGA800*/WVGA854*/WXGA,其它不同一个界面针对和平板设计如果差别很小,只有paddingsize的区别,可以将这些padding和size用dimen进行,具体是写到values/dimens.xmlvalues-large-mdpi/dimens.xml文件中.这样的好处就是编写一个layout布resources.html#AlternativeResourcesxhdpi:2.0、hdpi:1.5、mdpi:1.0baseline)、ldpi:使用"wrap_content"and"match_parent"RelativeLayout布局使用.9.pngdpsppx的使用 低密度(ldpi中密度(mdpi高密度(hdpi幕QVGAHVGAWXGA大小中Android有自己的匹配设计意图,当你分别在这三个文件夹下放不同的时,在处理的时候android会自动大和缩小,如果你上方有字体这个会更明显的看到效果,因为它会把放大或者缩小你看到的字体会变得<supports-screensandroid:largeScreens="true"android:normalScreens="true"android:anyDensity="true"看单词我们应该知道都是啥意思了,不过我还是稍微解释一下在文件加入这句话的含android:anyDensity="true",这句话就是说当我们的程序安装到不同密度的上时,程序会自动加载放在对应的资源的文件夹hdpi,mdpi,ldpi文件夹中的资源. <dimen 看到上面各个大神对兼容问题的解决方案,心潮澎湃,学到了很多,也不能藏私,在这里一点自己在做兼9xml文件中大量采用了这两种方式的结合体,RelativeLayout的在父节点中居中,左对齐,右对齐等都是不随分辨率改变而改变的.LinearLayout布局下android:layout_weight=""属性十分好用,比如你想实现一行出现三个等宽的TextView,怎么办?用这个属性就可以很轻松的达到效果(具体用法网上搜搜一坨坨的),如果可以在代码中动态的控制某个控件的宽和高占当前屏幕(任何分辨率)的一定比例.可以先获得屏幕的宽和高,然后通过设置控件的LayoutParam的方式(大概是这样,错误,欢迎拍砖)来设定控件的宽和高以及位置.本文 针对这种情况,Android提供了一套标准,它将屏幕分为三类,所以当你新建一个Android工程后,工程自动为你创建三个存放不同分辨率,UI的文件夹,UI对应不同分辨率及密度的屏幕.这三个文件夹只是告诉Android你设计的UI是针对哪种屏幕分辨率及密度进行设计的,Android终端会在打开应用的时候自动根据终端类型去匹配与文件夹里提供的UI相近分辨率及密度的.假设终端屏是WVGA类型的,也就是密度为240,那么程序打开时,会去提取drawable-hdpi文件夹下,然后用一个物理像素去显示一个像素,因为你把是放在drawable-hdpi文件夹下的,也就是告诉Android你当的密度与屏幕密度相同,则不进行缩放.当的密度与屏幕密度不同,则进行缩放.Android中长度单位最好使用与物理像素无关的逻辑像素dip,这样Android就能帮助我们自动适应不同的屏幕,保持设计意图.Android中大小的转换是基于密度,与屏幕分辨率和尺寸大小无关.密度越大显示就越清晰.总结UI,Android总能通过放大或者缩小来适应屏幕来保证设计意图,这个前提是布局里的单位是dip本文 Filedir/");//}IntentintentFilef=newFile(dir,Uriu=Uri} Buttonbutton=(Button) {=());//} ode,intresultCode,Intentdata) ode==CAPTURE_CODE&&resultCode=={Filedir/");//=Bitmapcbitmap= Filedir/");////if(!dir.exists())//dir////Uriu=//null,//Uriu=BitmapBitmapcbitmapMediaStore.Images.Media.getBitmap(//从图像到bitmap理Bitmapcbitmap= Filefile StringzteBitmapzteBitmap=);//CanvascanvasPaintp=ne}}}}呵呵简单吧?其实在开发中有些东西不用非得用高深的东西解决(我做了很多camera的改写结果效果也就那 这段时间一直在做系统自带应用的修改布局这些东西正好也来一下.我也看到了前面有人提到layout_weight这个东西.其实我也是一得这个是很好的一个属性,我就稍加详细的说下提供给新手参考,因为<LinearLayoutxmlns:android="http://s >>>屏幕上可以保证一定的布局不会改变.layout_weight方式来做.就完全其实我觉得可能是电脑也蒙了到底你是想闹哪样的结果.所以0dp很.反正谷歌源码都是这么写的.我也就随波逐流了.现在总结下.其实layout_weight就是控制高度或者宽度的一定比例.如果你想控制高度比例.那么容器方向垂直,组件高度为0dplayout_weight=你想要的比例,如果你想控制宽度比例,那么容器方向水平,组件宽度为0dplayout_weight=你想要的比例就好了.合理的搭配好容器的方向垂直、水平和组件的,便可以组装出一很好的使用这个属性,确定好现在的layout_weight到底是在控制高度还是宽度. 说到APP终端兼容,确实不是一件容易的事情,在没有一个合适的兼容性测试平台之前,最多的是靠的是经验,其次靠的是设备测试和用户反馈.而对于开发过一段时间的android应用的鄙人来说,认为有以下几点值得在终端①常用RelativeLayout,它不仅能解决布局显示的问题,而且对比连续使用LinearLayout来说,程序的运行效率形.LinearLayout对比RelativeLayout来说,优点是代码量少,缺点是布局的不稳定性和性能上的低效,个人理解上,Relative最常用为主布局,LinearLayout用在小地方,FrameLayout一般用来占位或有时重写,Absoluayout一3/4,1/2,1/4,因为通常的屏幕尺寸是——ldpi120,mdpi160,hdpi240,xhdpi320.拥有更好的效果,但是又要考虑到向下兼容,自己又很难割舍.比如4.0的硬件加速功能.那怎么办呢.①2.x版本之前打开恢复出厂设置是必须显式调用,4.0之后打开恢复出厂可以可以隐式调用(类名又不再intversion=Intentintent=new}②2.x版本没有硬件加速,而4.0以上又支持了硬件加速,但是我们的应用在4.0上运行需要加载的资源以达到更佳效果(又必须是在硬件加速开启的条件下),2.3上则要减少资源的加载,我们可以这么做publicObjectcallMethod(Class<?>_class,StringmethodName,Objectargs[])throwsSecurityException,{Methodmethod=_class.getMethod(methodName,newClass[0]);Objectobject=method.invoke(_class,args);}booleancallSuccess=false;try{callMethod(View.class,"isHardwareAccelerated",newObject[0]);callSuccess=true;{{{}catch {{}//doloadhigh//doloadlow}//doyour} 度,下在Android产品开发中,适配方面遇到的几类和解决思路.上的日量.那么在适配上的要求,绝不仅仅是在各款上的功能可用.以下的是在设计时都要重当程序达到一定的复杂程度以后,OutOfMemory是一个头痛的问题,相信很多程序员都遇到过.虽然Java语言支持收集,但在Android开发中一不还是容易OutOfMemory异常.这些问题在项目的一开始可能不会引起重视,而当需要适配的时候,问题就会出来.重复.这里可以合理使用Java的软机制来在内存吃紧时回收,而内存富裕时保持在内存中供下分辨率下选择.这个安卓的UI框架提供了一套机制 比如适应Android某个版本以后的特性的功能,需要向前兼容.序提供了一系列API,所以在目标平台的分辨率是可以完全确定的情况下,程序也可以精确的控制自身在目标资源分类符long和notlong。味着屏幕长宽比。在Android系统中,程序一般并不直接处理分辨率。以屏幕分辨率为基础,沿屏幕长宽方向排列的像素。密度较低的屏幕,在长和宽方向都只有比较少的像素,而密度无关的像素需要的DIP缩放操作。要把密度无关像素转换为屏幕像素,可以用这样一个简单的公式:pixelsdips*来定义你程序的界面布局,因为这样可以保证你的UI在各种分辨率的屏幕上都可以正常显示。mm:毫米,标准长度单位pt:磅,标准长度单位,1/72英寸.低密度(ldpi中密度(mdpi高密度(hdpi幕<supports-screensandroid:largeScreens="true"android:normalScreens="true"android:anyDensity="true"android:smallScreens="true"android:xlargeScreens="true">"装在不同密度的上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资源。样的话,应用就会在小密度上加载mdpi文件中的资源。DisyMetricsmetric=newDisyMetrics();intdensityDpimetric.densityDpi;DPI(120160不同密度的进行分别设置。这里地图的偏移量可以在values-xpdi,values-hpdi,values-mdpi,values-ldpi四种文件夹中的dimens.xml文件进行设置<dimen <dimen Android应用程序支持横竖屏幕的切换,androidActivityActivityActivity的地方进行如下的配置而有的程序是适合横竖屏切换的。如何处理呢?首先要在配置Activity的时候进行如下的配置:{//landdonothingis//portdonothingis}}使用RelativeLayout设备都至少会有600dp的宽],这样就可以这样定义一个布局文件:res/layout-sw600dp/main.xml(这是一个res/layout/main.xmlAndroid3.2之前的设备上使用这样的表示方法,仍然需要使用xlarge来处理这样的大屏幕情况3.2Smallest-width的标识符,为了兼容之前的设备,仍然需要res/layout-sw600dpmulti-panelayout(3.2上进行使用,但是与上面的布局文件一致,都是two-pane的布局)res/layout/main.xml,single-panelayout使用9-patch,9-patch是一种有限制的可伸缩的格式,为了避免通常的在伸缩后出现的不某些不适配,比如中有个logo,你不希望这个logo随拉伸而拉伸,那么我们就应该使用这种格式的用dp,或者sp来表示大小;窗体Activity来显示对于的内容;判断当前的布局UI流程的设计,首先需要知道当前使用的是哪个布局,two-paneorsingle-pane,因为前面讲到系统会自动根据当前屏幕来选择显示对应的布局文件;根据当前布局有不同的反应,某些动作会根据当前的布局而有不同的反映。例如如果你的应用是么需要跳转到另外一个Activity来显示对于的内容;而避免duplication.例如,ArticleFragment被使用在dual-pane的布局里面,<LinearLayoutxmlns:android="http://s <fragmentandroid:id="@+id/headlines"android:layout_height="fill_parent"<fragmentandroid:id="@+id/article"android:layout_height="fill_parent"的绘制,可以使用系统的Canvas类来实现。Android运行在提供不同屏幕尺寸和密度的多种设备上。对应用程序而言,Android系统提供一致的跨设备的开发环境并且处理适配不同显示屏幕的大部分工作。同时,系统提供API,允许针对不同的屏幕尺寸和密度来控制的应用程序UI,从而为不同的屏幕配置来优化UI设计。的.apk文件提供优化的用户体验。的屏幕配置的总括,以及API和底层屏幕适配特性的概览。,,,DPI(每英寸点数。例如,“低”的密度屏幕比“正常”或“高”密DPDP单位转换为屏幕像素是简单的:PXDP*(DPIAndroid1.6(APILevel4)开始,Android提供了对多个屏幕尺寸和密度的支持,以反映出设备可能有的Android系统的功能,为每个屏幕配置优化应用程序的用户界面,从而确保应用程,,设备的配置,此设备即拥有一个HVGA屏幕的T- 每个广义的大小和密度了一系列实际的屏幕尺寸和密度。例如,两个设备,这两个设备报告的正常屏Android抽象了应用程序的这些差异,因此可以提供广义的大小和密度设计的用户界面,让系统需要处理任何最终的调整。图1显示了不同的大小和密度大致分类成不同的大小和密度组。(选择性资源。通常情况下,应该为不同的屏幕尺寸提供alternativelayoutsalternativebitmapimages。在运行时,系统基于当前设备的广义屏幕尺寸或密度为应用程序采用适当的资源,UI元素(如按钮,在低密度屏幕上显示较大而在23.2中,textviewbitmap以像素为单位指定尺寸(像素单位,所以视图的物理尺寸在地密度屏幕上2中是一样的。然而,对低密度和高密度的屏幕,系统按比例调高或在大多数情况下,可以简单的通过用密度无关像素(dpunits)来定义所有的布局尺寸或者适当的通过"wrap_content"bitmapdrawableAndroid支持多屏幕的基础。系统处理的应用程序屏幕适配的大部分工作,尽管如此,为了更妥善处理不式运行。应用程序支持的屏幕尺寸,应该在manifest文件中包括<supports-screens>元素。smallnormallarge,xlarge。例如,一个超大大屏幕的布局,应该在layout-xlarge/。新技术来布局资源在为Android3.2设计平板布局部分有进一步讨论。可以使用限定符来提供密度相关的资源,这些限定符包括ldpi(low),mdpi(medium),hdpi(drawabledrawable资源。与hdpi为限定符的资源(drawable-hdpi/)会最佳匹配,所以系统使用该下的drawable资源。drawable/下的就是是默认的资源。系统假定默然而,当系统试图寻找一个密度相关的资源但是在密度相关的下没有找到时,系统并不总是使用默认资源。系统可能会改用其他密度相关的资源之一,以提供更好的缩放结果。例如,当寻找一个低密度资源而没找到时,系统倾0.5轻松地将高密度资源缩小为低密度,这种缩放要个字符串,可以在Android项目追加到资源 <qualifier1所示,它限定了这些资源可以用于的屏幕配置(hdpi或xlarge).>— 比如,xlarge是一个超大屏幕的限定符。当追加此字符串到一个资源 xlarge(~160dpi).(Thisisthebaselinedensity.)Resourcesforalldensities.Thesedensity-independentresources.Thesystemdoesnotscaleresourcestaggedwiththisqualifier,regardlessofthecurrentscreen'sdensity.Resourcesforscreenssomewherebetweenmdpiandhdpi;approxima y213dpi.Thisisnotconsidereda"primary"densitygroup.Itismostlyintendedforevisionsandmostappsshouldn'tneedit—providingmdpiandhdpiresourcesissufficientformostappsandthesystemwillscalethemasappropriate.Ifyoufinditnecessarytoprovidetvdpiresources,youshouldsizethematafactorof1.33*mdpi.Forexample,a100pxx100pximageformdpiscreensshouldbe133pxx133pxfortvdpi.Resourcesforscreensinthelandscapeorientation(wideaspectratio).Resourcesforscreensintheportraitorientation(tallaspectratio).AspectResourcesforscreensthathaveasignificantlytallerorwideraspectratio(wheninportraitorlandscapeorientation,respectively)thanthebaselinescreenResourcesforusescreensthathaveanaspectratiothatissimilartothebaselinescreenconfiguration.要使用表1中的尺寸限定符)的屏幕提供不同的bitmapdrawable。 //layoutfornormalscreensize("default") //layoutforsmallscreensize //layoutforlargescreensizeres/layout-xlarge/my_layout.xml//layoutforextralargescreensize //bitmapformediumdensity //bitmapforhighdensity //bitmapforextrahighdensityAlternativeResources。注意,Androd系统在运行时选择使用哪些资源时,它使用某些逻辑来决定“最佳匹配”的资源。也就是说,使((,所源是age限的是是个a-ie的备。放置nodpi配置限定符的 。如果用户界面,需要让位图来适应视图的大小(如一个按钮的背景,应该使用Nine-Patch位图文件。Nine-PatchPNG文件它可以在特定的二维地区伸展。当系统需要拉伸位图所在的视图时,系统会拉伸Nine-Patch文件,但是仅仅拉伸的是指定区域。正因为如此,不需要提供不同的屏幕尺寸不同的,因Nine-PatchNine-Patch文件。.几乎每个应用程序都应当为不同的屏幕密度提供资源,因为几乎每一个应用程序都拥有一个启动图标,而,) 为48x48像素的位图(应用程序启动图标,与之对应的所有不同的尺寸应当是:菜单图标,状态栏图标,tab图标等等。Android3.2对于第一代运行Android3.0的平板电脑来说,平板布局的适合方式是使用xlarge限定符(比如xlarge/义资源的方式。这种新技术是基于布局所需的空间数量(600dp宽,而不是试图让布局去符合广义的尺不可用的。因此,的尺寸应当明确的是activity所需的尺寸—当系统应当提供多少空间给布局时,它会UIActionBar被认为是应用程序的一部分空间,尽管布局没有Thefundamentalsizeofascreen,asindicatedbytheshortestdimensionoftheavailablescreenarea.Specifically,thedevice'ssmallestWidthistheshortestofthescreen'savailableheightandwidth(youmayalsothinkofitasthe"smallestpossiblewidth"forthescreen).Youcanusethisqualifiertoensurethat,regardlessofthescreen'scurrentorientation,yourapplication'shasatleast<N>dpsofwidthavailableforitForexample,ifyourlayoutrequiresthatitssmallestdimensionofscreenareabeatleast600dpatalltimes,thenyoucanusethisqualifertocreatethelayouttheseresourcesonlywhenthesmallestdimensionofavailablescreenisatleast600dp,regardlessofwhetherthe600dpsideistheuser-perceivedheightorwidth.ThesmallestWidthisafixedscreensizecharacteristicofthedevice;thedevice'ssmallestWidthdoesnotchangewhenthescreen'sorientationThesmallestWidthofadevicetakesintoaccountscreendecorationsandsystemUI.Forexample,ifthedevicehaspersistentUIelementsonthescreenthataccountforspacealongtheaxisofthesmallestWidth,thesystemdeclaresthesmallestWidthtobesmallerthantheactualscreensize,becausethosearescreenpixelsnotavailableforyourUI.Thisisanalternativetothegeneralizedscreensizequalifiers(small,normal,large,xlarge)thatallowsyoutodefineadiscretenumberfortheeffectivesizeavailableforyourUI.UsingsmallestWidthtodeterminethegeneralscreensizeisusefulbecausewidthisoftenthedrivingfactorindesigningalayout.AUIwilloftenscrollvertically,buthavefairlyhardconstraintsontheminimumspaceitneedshorizontally.Theavailablewidthisalsothekeyfactorindeterminingwhethertouseaone-panelayoutforhandsetsormulti-panelayoutfortablets.Thus,youlikelycaremostaboutwhatthesmallestpossiblewidthwillbeoneachdevice.Specifiesaminimumavailablewidthindpunitsatwhichtheresourcesshouldbeused—definedbythe<N>value.system'scorrespondingvalueforthewidthchangeswhenscreen'sorientationswitchesbetweenlandscapeandportraittoreflectthecurrentactualwidththat'savailableforyourUI.Thisisoftenusefultodeterminewhethertouseamulti-layout,becauseevenonatabletdevice,youoftenwon'twantsamemulti-panelayoutforportraitorientationasyoudolandscape.Thus,youcanusethistospecifytheminimumrequiredforthelayout,insteadofusingboththescreensizeSpecifiesaminimumscreenheightindpunitsatwhichtheresourcesshouldbeused—definedbythe<N>value.system'scorrespondingvaluefortheheightchangeswhenscreen'sorientationswitchesbetweenlandscapeandportraittoreflectthecurrentactualheightthat'savailableforyourUI.Usingthistodefinetheheightrequiredbyyourlayoutisusefulthesamewayasw<N>dpisfordefiningtherequiredinsteadofusingboththescreensizeandorientationHowever,mostappswon'tneedthisqualifier,consideringthatoftenscrollverticallyandarethusmoreflexiblewithhowheightisavailable,whereasthewidthis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论