android 开发板源代吗开发真的很简单吗

期待与不足并存 Android L预览版体验
日 02:58&&&出处:&& 作者:马炯慧&& 编辑:马炯慧
  &&要想尝鲜Android L,必须要有靠谱手机才行[]  (一)准备工作必不可少  首先,要想尝鲜Android L预览版,你必须要拥有一台支持该系统的设备(额,貌似有点废话了...)。从目前已公布的可支持Android L预览版设备来看,似乎只有谷歌的“亲儿子”们(Nexus 5以及Nexus 7)才能享受的到。  再接着,就是进行获取手机/平板设备的最高权限了,也就是我们所俗称的“ROOT”。方法也很简单,大家之前如果没有试过ROOT,可以从网络上直接下载傻瓜式一键ROOT工具,这里推荐我经常使用的一款ROOT工具,“刷机精灵”供大家参考下载使用。具体操作步骤,按照提示一步一步进行即可。&&懒人一键下载地址:&&& strong=&&&  成功ROOT之后,就是最后一步刷机了。使用“刷机精灵”软件中自带的Android L预览版刷机包,进行“一键刷机”(在刷机过程中会有非常简单的几个手动选择步骤),耐心等待15~20分钟左右即可搞定。&& 看到这个界面就说明你刷机成功啦~  *另外,需要大家注意的是,刷入Android L预览版将会对你手机系统中的所有已有资料进行清空,因此在刷机前一定要进行备份,以免重要资料丢失。  (二)基本功能体验非常流畅  接下来,就是简单的初步上手体验了,成功刷机之后还是有些小激动的,嘿嘿。  1.系统“小清新”配色,新增锁屏信息推送,通知栏、多任务管理变化大  此次Android L预览版在表面上最大的变化,无疑是在系统整体设计(配色)风格、通知栏功能升级以及多任务管理界面了。从谷歌I/O大会中了解到,这种全新的设计风格被称作为“材料设计”(Material Design)。从“设置”功能菜单中的白底灰字外加墨绿色图标,搭配起来看上去很是清新。会比之前黑底白字蓝色图标看起来更加活跃。整体配色非常清新  不仅是配色风格进行改变,在全新的Android L预览版中终于看到了我期盼已久的锁屏消息推送。不管是未接来电、还是未读聊天消息,都可以做到一目了然。当然了,如果不是什么太要紧处理的事件,你可以通过左右滑动将其移除。&& 未解锁状态下,在屏幕中间位置进行信息推送  通知栏的改进也是我非常喜欢的,之前那种推送消息和快捷开关分开放置的设计,简直是令人抓狂。新的通知栏,从手机屏幕顶部向下滑动,第一次可以处理手机推送的新信息;再次向下滑动就可以进行各项快捷开关的控制了。  另外,这里再多说一句,新系统的解锁方式也与之前不同,普通解锁向上滑动屏幕即可;而左右滑动则是快速进入拨号界面或拍照界面。全新设计的下拉式通知栏  两段式的下拉通知栏,虽然与之前的操作方式有所不同,在我刚开始使用时也是特别不适应,不过经过一段时间的使用,也基本适应了新下拉通知栏的使用节奏。这要比之前的下拉菜单使用效率高出许多。&& 卡片式多任务管理  虽然我自己没有用完一个或几个应用后彻底清除后台一次的“强迫症”,但好的设计还是要再说一说的。在手机解锁之后的任何时候,你只需轻触屏幕右下角的方形虚拟键,呈卡片状的所有后台运行任务就会出现在你面前。  这样的设计思路,我们似乎可以看到之前Chrome上的标签页切换式样的影子,不过在Android L预览版中的卡片式多任务,会显得更加立体、有层次,关闭程序时,只需要你将手指放在想要关闭程序的上面,轻轻地左右滑动之后即可关闭。  2.增加新的动画效果丝滑、顺畅,用户能更好地分辨出操作是否成功  在这几天试用Android L上还有一个感觉,就是觉得这个系统中动画效果做的非常不错,而且也很是贴心。比如说,像你在进行按键拨号时,除了手机在操作时进行相应的震动提示,但犹如水波纹的动画提示效果,会让你的操作更加准确、清楚。  而当我在试用过程中,如果将某一项菜单功能翻到最底部(或最顶部),Android L也同样会唤起相应的动画效果,来向我进行提示。别看都是一些细枝末节的东西,或许也正是因为这样的设计上的小细节,才能打动更多用户的心。  3.相机的功能更好用,功能增多  在之前使用Nexus 5时,我机会不会去用它来拍照。除了本身硬件上的配置外,另一个主要原因是因为它的拍照操作实在是太难用了。各种拍照功能的切换,需要你去不停地在屏幕上上下左右滑动,一次性成功率实在是太低了。很多Nexus 5用户也是对相机功能各种吐槽。全新的相机功能切换--“显而易见”全新的相机功能切换--“显而易见”  在Android L预览版中,谷歌总算对相机的若干功能进行了改进。各项功能均可以在屏幕上明显地显示并选择,效率方面提升了不只是一点两点。反正,我现在也是逐渐开始拿起搭载着Android L的Nexus 5“扫街”了。  (三)个人认为的小亮点  众所周知,在Android L中系统直接默认采用ART编码模式(Dalvik模式被完全取代),完全兼容64位处理器。虽然说新的编码模式会给整机带来更为流畅、更快App启动速度,但在App的兼容性方面似乎有很多网友会有所担心。  不过从我最近这段时间的初步体验来看,一些主要日常使用的App都可以很好地通过ART编码,同时也可以进行正常使用。另外,还要说明的是,我的日常使用中基本不会去玩类似《极品飞车17》等一些大型3D游戏,所以说在Android L预览版中对游戏的兼容性,从我个人的试用来看还不得而知。大家如果有这方面的疑问,可以在文章下方留言区或中给我留言,我会在后续的使用中给大家做出解答。  在Android L中,节电自启动和勿扰模式,同样也是两个体现为用户着想的小功能。新的系统中,默认会在手机剩余电量为15%时,自动开启节电功能,降低不必要功耗从而保证续航。&& 节电助手&勿扰模式  而勿扰模式,会在你调节手机音量时跟随出现,我们可以根据自己的实际使用情况来设定勿扰模式开启时间。当然,你还可以设定一些“重要人物”在你开启勿扰模式时也能找到你。  这两个功能,是我最近使用Nexus 5时使用最最频繁的两个功能。勿扰模式就不说了,我手机基本是处于24小时开机,大半夜的最怕各种“响一声”骚扰电话了,各种陌生电话晚上睡觉就再也听不到了。向来没有主动充电习惯的我,这几天也是靠着Android L的节电助手,手机的续航时间也能撑的更久。关于快捷开关的小发现  最后这个小亮点,也是我这两天偶然发现的。之前使用Nexus 5时,想要切换个WiFi热点,操作起来极其繁琐。而在新的Android L中,就变的非常简单了。如果你只是想开启WiFi,只需要你点击WiFi图标即可;如果你是想切换WiFi热点的话,直接点一下图标下方的字幕标识,就能直接切换到相应的WiFi切换功能页面,非常方面。当然了,在WiFi另一侧的蓝牙,使用情况也是一样的。Android L系统空间并不是太大  与动辄七、八百兆的iOS重大系统更新不同,Android L所占的系统空间并不是太大。我自用的Nexus 5机身存储空间标配16GB,在进行刷机运行Android L之后,系统所占机身空间并不是太多。大家大可放心地刷机,不过一定要记得提前备份资料,再次温馨提示。O(∩_∩)O~  (四)有待改进的不足之处  这两个问题似乎已经是“顽疾”了,在Android L中更换SIM依旧需要重新启动手机后,才能识别新SIM卡。也或许是处于安全性的考虑?这一点我始终不太能够理解。&& 原生安卓系统的两大“顽疾”  另外,在拨号功能上依旧没有出现更高效的智能识别。联系人少的还好说,要是手机里存了三、四百人或者更多,从里面找个电话真的能让你着急死。这难道真的是原生Android“自命孤傲么”?  多任务处理虽然说改成了动画效果很炫的卡片式管理模式,但依旧让人崩溃的是没有一键清除后台程序的功能。手动关闭一、两个多余程序还可以,如果有那么十几个,再用手指一个个滑动关闭,是不是也太不人性化了。  前面我曾说道,Android L预览版可以适配很多日常使用的App,但适配仅仅是可以正常使用这些软件的具体功能,而兼容性方面就显得有些层次不齐了。就拿上面手机来说,所有功能都可以使用,唯独这界面实在是不忍直视。另外,还有像空间客户端、新浪微博客户端直接不能正常安装。微信在前几天使用时,也是一直处于无限循环的登录、验证状态;不过这两天我把旧版本卸载,重新下载了一个新版本,就可以顺利使用了。在这里我也是希望,能有更多的App针对Android L进行兼容性匹配的测试与更新。  (五)体验小结  在经过这一段时间对Android L预览版的上手体验,可以简单地用一句话来总结,“期待与不足”并存。虽然目前Android L是开发预览版,但在今后正式版到来,也基本上会沿用这些新功能,新设计、配色风格,更多目前没有条件尝鲜的用户,可以好好地期待一下日后升级后的流畅使用体验。  同时,不足之处也是我们所应该给予一定的关注,虽然看起来都不是什么太“致命”的小缺憾,但似乎也可以帮助那些,在近期打算升级尝鲜该系统的用户,进行一个利弊分析。  到底升级还是再等等正式版,大家还是根据自己的实际用机需求进行决定吧。■  &&要想尝鲜Android L,必须要有靠谱手机才行[]
屏幕尺寸:4.9英寸 CPU核心数:四核 操作系统:安卓Android 4.4 后置摄像头:800万像素 运行内存(RAM):2GB 电池容量:2300毫安时
大学生分期购物销量榜
看过本文的人还看了
80.8万人浏览 54.5万人浏览 8.4万人浏览 3.4万人浏览
汽车之家内容精选
每日精选15052 编辑宋宋和大国推出的脱口秀节目3006玩客 最好玩的活动与试用平台 201495编辑部的故事 129泡美美 分享最美科技 5895科技生活注:Android 5.0的问题总结在里。
1、用(SDK starter package)的installler安装Android SDK时提示无法找到JDK,但实际上机器上已经安装了JDK。
一个对不少人有效的解决方法是看到此提示时先点一下&回退&按钮,再点&下一步&,就会发现JDK被找到了。&
但在我机器上这个方法不起作用。所以我选择不使用installer,而是下载zip格式的文件,解压缩后运行SDK Manager.exe即可。
2、在Eclipse里新建一个Android项目,运行/调试时提示&Could not find xxx.apk!&
网上提到的大部分解决方案是clean整个项目,或选fix project properties菜单项。但对我的环境不起作用。
升级到Eclipse 3.7后,新创建的android项目在Build阶段报告一个异常&sun/security/x509/X500Name&,怀疑与所用的jdk(IBM JDK6)有关。果然,卸载IBM JDK并安装SUN JDK后问题解决。
3、让程序适应不同的屏幕分辨率
可参考这个链接:。
4、在android模拟器里用10.0.2.2可访问宿主机。
5、在setWidth()方法里指定的宽度是以pixel为单位的,如何转换为使用dip(device independent pixels)为单位?
使用下面的代码,&
&//&Converts&14&dip&into&its&equivalent&px
Resources&r&=&getResources();
float&px&=&TypedValue.PLEX_UNIT_DIP,&14,&r.getDisplayMetrics());
6、弹出式对话框的用法,介绍得比较详细。&
7、导出apk文件时需要签名,比较详细。&
8、android界面设计原则,参考。
9、使用merge(而不是layout)可以达到在避免重复写layout的同时减少layout的数量。&
10、真机USB调试比用AVD调试快得多,设置也很简单,见。不过10.0.2.2不能用了,真机可以通过wifi访问局域网内的服务器。&
11、android-ui-utils,一个不错的在线Android图标生成器,。&
12、调试时如果出现莫名其妙的空指针错误,例如findViewByID()返回null,先试试clean一下整个project,通常都能解决。&
13、让ListView里无数据时显示一行信息。&
,注意ListView和TextView的id。
14、用自己的图标替换ListView里的RadioButton
在用作row的layout里添加一个图片,在java code里覆盖adapter的getView()方法,根据ListView的getCheckedItemPosition()结果设置图片的可见性。注意不要通过setOnClickListener()方法设置view里的图片可见性,因为ListView只维护可见的那些row控件,这样做会导致很奇怪的结果(点第一条记录结果第二条记录被选中,并且滚动ListView时选中状态还会随机变化,)。
另外一个办法是通过style设置checkMark为所需要的图标,可能是更简单的解决方案(还没试)。&
Update: 以上结果基于对ListView实现不了解的情况,其实使用RadioButton是可以实现的,见#22。&
15、ListView的selection和choice是完全不同的,所以不要指望ListView#clearChoice()能清楚你已经是checked状态的那些item。
16、屏幕方向变化时(横屏-&竖屏,或反过来),ListView里发生变化的内容丢失,状态回到开始时的样子。
当屏幕方向发生变化时,android会重建整个Activity以便你构造更适合某个方向的UI。为了避免这种情况,在AndroidManifest.xml里的那个Activity声明上增加android:configChanges="orientation"&即可。详见。
17、各手机平台仿真器/模拟器的。
18、AlertDialog#show()方法是不会阻塞当前线程的。&
19、让不同Activity之间进行通信,例如一个TabActivity里有多个Activity,它们之间需要传递一些消息。
可使用BroadcastReceiver机制。 。要注意的是,tab还未启动时是无法接收到消息的,所以要在tabhost所在的activity里也接收消息,当tab启动时传给它。
20、Android SDK里的style和theme文档
21、Tab的样式。
Android的tab样式问题比较多,不同版本的样式也不一样。这里有一个自定义样式的。
22、在ListView里使用单选/复选按钮。
问题很多,看起来解决了问题,但在我的环境里没试验成功。
Update: 以复选按钮为例,本质的问题在于ListView里的复选按钮不知道对应的model是哪个,需要事先用CheckBox#setTag(myModelObject)关联,onclick事件里用getTag()改变其选中状态。建议看。&
23、strings.xml里定义的字符串里增加参数。
在字符串里用&%1$s&、&%2$d&表示参数的序号和类型,然后用String.format()方法赋值。参考。
24、嵌入条码/二维码扫描功能
使用zxing。方法是在手机上先安装BarcodeScanner.apk,然后在程序里调用其提供的Activity,该Activity会返回扫描结果。
25、改变ListView里每个Row的背景颜色
直接在getView()里写view.setBackgroundColor()是不行的。正确的方法是先在drawable目录里建一个xml文件,自己起名如my_row.xml,内容如下(关键是第一个和第四个&item&):
&?xml version="1.0" encoding="utf-8"?&
&selector xmlns:android="/apk/res/android"&
&item android:state_window_focused="false" android:state_selected="true"
android:drawable="@android:color/transparent" /&
&item android:state_selected="true" android:drawable="@android:color/transparent" /&
&item android:state_pressed="true" android:state_selected="false"
android:drawable="@android:color/transparent" /&
&item android:state_selected="false" android:drawable="@color/solid_red" /&
&/selector&
然后在getView()里这样写就可以了:
if (item.getStopId().equals(User.stopId)) {
view.setBackgroundResource(R.drawable.my_row);
view.setBackgroundResource(android.R.drawable.list_selector_background);
26、在一个TableLayout里让Button宽度相同并占满表格宽度(想象一个由按钮组成的九宫格)
如果Button上的文字不长,按一般的方法就可以实现,例如。当Button上的文字很长,还是会使布局变乱,每个列的长度将不一样。解决方案是将按钮的layout_width设为0,layout_height设置为所需要的值,需要换行时将singleLine设置为false,最后将按钮的gravity设置为center。
27、对切换屏幕方向的处理&
参考stackoverflow上的。&
当MyActivity位于一个TabActivity里时,我做了一些实验表明, TabActivity是否声明android:configChanges="keyboardHidden|orientation"与MyActivity无关,只有MyActivity做了上述声明后才会在改变方向时触发onConfigurationChanged()方法。
28、strings.xml里的字符串包含html格式标签时
需要用&Data&&![CDATA[...]]&&/Data&把html代码包起来。&
29、在AlertDialog里用ListAdapter(如ArrayAdapter)时,文字不显示。
view的resourceId要用select_dialog_singlechoice而不能用simple_list_item_single_choice,否则文字颜色会与背景颜色相同而无法显示。
30、在android程序里使用第三方包的配置方法&
参考成功。&
31、定制tabhost的外观
这方面的需求和问题网上都很多,主要的解决方案有基于tabhost的和基于radiobutton的两大类,这里有几个可以参考的链接。,,&
32、取得当前屏幕方向
有好几个方法可以得到orientation值,但一些得到的值不对,例如getWindowManager().getDefaultDisplay().getOrientation()和getReqestedOrientation()。我实验下来比较靠谱的是getResources().getConfiguration().orientation。&
33、Activity里第一个View是EditText的时候,软键盘自动弹出。
似乎只是一些机型会这样做。要阻止软键盘弹出,可在onCreate()里加一行代码。&
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
34、Dialog的theme问题
使用Theme.Light主题时,Dialog显示不正常。相关讨论:,
35、注意区分CheckBox和RadioButton的OnClickListener和OnCheckedChangeListner
使用前者时,当在代码里执行myCheckBox.setChecked(true),不会触发事件,而后者会触发事件。
36、监视GPS开启/关闭事件&
用GpsStatus.Listener不可靠(事件不上来),这个链接的方法是监视Settings里的事件:
37、仿真器横屏
快捷键ctrl+f11。有人提到ctrl+f12和numpad 7也可以,但我这里不起作用。
38、用JAXB生成KML对应的Java Code时会遇到一些问题,解决方法如下:
1)写一个binding文件如bindings.xjb放在与ogckml22.xsd同一目录,内容可参考(根据错误提示要删除几行)
2)在命令行里加-extension
3)在命令行里加-target 2.1(否则生成的java类的annotation带有jdk6不识别的关键字"required")
完整的命令行如下:
xjc -xmlschema -verbose -extension -b bindings.xjb -d src -target 2.1 ogckml22.xsd
39、ListPreference的entryValues只能使用string-array
如果使用了integer-array,在点击这个preference项时会产生一个空指针异常,相关讨论见、。
Update: 又发现一个ListPreference的新问题,即使用string-array,defaultValue值也不能取太大的(超过Integer.MAX_VALUE)整数,否则defaultValue不起作用(选项没有缺省被选中)。 真是问题多多。android版本2.2。
40、Android提供了方便的Share机制,但一般都是把文字share到微博或SMS,如何能"share"文字到SD卡文件呢?&
描述了同样的问题,等待有人回答。 目前的想法是,在程序里自己实现一个接受ACTION_SEND的activity,做法可参考、或。
41、一个在线查看kml文件的网站,供参考。
42、关于onSaveInstanceState()的使用
通常与onCreate()配合,而非onRestoreInstanceState(),参考。
补充:一个误区是onSaveInstanceState()方法是当activity被系统销毁时才调用,其实是当activity&变得容易被系统销毁&时就会被调用,例如当按下home键时,此时activity不再在前台显示,也就变得容易被销毁了。,
43、ListView里点击一个item背景色不变为橘黄(缺省的反馈颜色),各种OnClick事件不被触发。
一种可能是在item的布局文件(如foo_list_row.xml)里使用了下面的这些属性(自动滚动显示文字时常会用到),去掉后即可恢复正常:
android:ellipsize="marquee" android:scrollHorizontally="true"
android:marqueeRepeatLimit="marquee_forever" android:focusable="true"
android:focusableInTouchMode="true"
44、实现不停向上滚动的ListView
假设你有一个长长的list需要自动展示,方式是每隔几秒向上滚动一行,有点类似TextView的marquee功能(跑马灯?)。这个需求可以通过Handler实现,具体参考;当列表滚动到最后一行时,直接滚回第一行显得很生硬,可以用里提供的方法解决。
45、在Button的文字旁加图片
在&Button&里使用android:drawableLeft="@drawable/my_icon"&android:gravity="left|center_vertical"即可,类似的可以加在右侧或上下方。但如果Button有其他状态时,需要用selector指定不同状态下的图片。此外,图片的大小是不会自动根据Button调整的。
46、旧版本兼容
参考sdk文档里的。&
47、轻松实现圆角背景
不需要做圆角图片,看看,很方便,注意把angle改为45的倍数否则运行时报错。
48、Android内存泄漏检测
在DDMS可以查看heap使用情况,大概了解是否有内存泄漏。DDMS还可以dump出.hprof文件,后者可以用打开,进一步分析错误原因。注意,startActivity()后要根据情况决定是否调用finish()方法(如果需要back则不finish(),在适当的时机用FLAG_ACTIVITY_CLEAR_TOP一并回收内存空间),未finish()的activity是会一直占用内存的。
49、Android的第三方library&
总结了不少。&
50、Android UI设计模式
51、Google Map扩展的使用。
52、当Spinner是invisible状态时,貌似调用mySpinner.setSelection(i) 不会触发其onItemSelected()事件。
53、实现gzip压缩服务器返回的json对象时,注意要response.setContentType("application/json"),并且在server.xml里把application/json设置到compressableMimeType里才能实现。我因为前一个原因浪费了三四个小时。
54、对AlertDialog.Builder应用定制的theme
使用ContextThemeWrapper,用法参。但后来发现这个方法不起作用,有一种说法是这个方法只对部分android版本有效,也有说其根本无效的(都是在so上)。用AlertDialog.Builder的setVIew()方法也是有问题的,因为你会发现在这个view的旁边一圈(假设你的view是浅色背景)还是黑色的,效果很不好。其实如果只是要将对话框设置为白色背景,可以使用AlertDialog.Builder的setInverseBackgroundForced(true)方法,很简单,很直接。
55、从gallery选择图片的一些可用参数&
参考,和这个&(文件得不到原始图片,只能得到缩小后的图片)。&
56、从gallery取图片时要注意内存是有限的,而图片可能很大。
利用inSampleSize可以帮助解决,参考的代码。&
57、当程序进程被系统kill掉(常常在内存紧张时发生):
HttpClient的session可以用persist方式保留;
其余数据建议保留在SharedPreferenes里;&
onActivityResult()里是能够获得另一个activity传回来的intent里的参数的;
58、连接到真机时提示Unable to open sync connection!&
原因未知,解决方法是在真机的设置里去掉usb调试,然后重新勾选。&
59、得到GPS状态(寻星或已获得位置)
这个问题看似简单,但Android里的LocationListener#onStatusChanged()方法工作不正常,表现为在大多数版本下都不会被调用。里提供的方法试了一下好像是可以用的。
60、在Android里画统计图(柱图饼图等等)
里给出了不少解决方案,我暂时选择的是aChartEngine,用法和JFreechart比较类似,参数超多,目前的活跃度也不错。&
61、进程经常被kill
可以考虑启动一个service(即使什么都不做),这样进程的&重要性&就变得很高,因此就不容易被kill了。&
62、&Receiver not registered&错误
执行unregisterReceiver(myReceiver)方法时,如果之前没有注册过myReceiver,会抛出这个异常。
63、应用在后台运行,需要弹出对话框(例如触发自service产生的事件)时报错:&BadTokenException: Unable to add window&
利用isFinishing()测试activity是否在后台,&
64、Emulator太慢了?
试试Android x86,据说比官方的快很多(我还没试过,正在下载)。
65、禁止自动切换到横屏模式
&activity android:name=".SomeActivity" android:label="@string/app_name" android:screenOrientation="portrait"&...&/acivity&
66、几个众包模式的beta测试平台
iOS最著名的是testflight,也有其他一些类似的测试平台支持android,详见。&
67、实现锁机后黑屏但不出现锁机画面
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
还有一个功能类似的flag是FLAG_DISMISS_KEYGUARD,区别在于前者只对当前activity有效,后者全局有效。另外前者对安全锁屏也有效,后者则只对普通锁屏有效。附一个。&
但是前者有一个问题,就是在两个都设置了FLAG_SHOW_WHEN_LOCKED的activity间切换时,可能锁屏界面会闪一下。见此。
68、一些可用于android应用性能测试和内存泄漏检测的工具
69、进度条的一个bug
重设setMax()以后显示的进度百分比不正确,至少在Android 2.1 (API Level 7)里有这个问题。 见和。
70、当ListView的item里包含控件(如按钮、复选框)时 ,这个item无法被选中。
Android不允许选中ListView里带有focusable元素的item,解决方法是将该控件的focusable属性设置为false。
71、帮助做简单web测试的工具(构造并发送各种http请求)
里总结了不少。&
72、Tab放在底部(仿iphone风格)
中文的教程看了好几个都不靠谱,so上的搞定,或者这个。&
73、让ListView没有数据时也显示HeaderView/FooterView
技巧是让empty view包含headerview/footerview,见。&
74、在Google map上添加popup的方法
最简单的方法见。&
75、一个网站,可以搜索android相关项目的代码和资源。&
76、Android里的Search Activity不支持返回结果到调用其的Activity(因为onSearchRequested()方法没有调用startActivityForResult()启动search activity)
SO上有若干个提出此问题的帖子,例如、等等,没有特别方便的办法解决,一个我没试过但看回复应该可行的方法见。
77、查看apk文件内容的工具
推荐,一个命令行工具,用法如下:
&apktool.bat d my.apk
可以还原所有的资源文件,但.java文件一般无法还原。
78、Android中使用的各类图标的标准尺寸
请参考sdk自带的。&
79、Android的Searchable接口,无法让调用者获得查询结果。
参考这篇文档可以实现,思路是自己用startActivityResult() 启动搜索界面,然后再onActivityResult()里取出结果。我测试可行,但该文档有两处错误需要注意:
1) 是handleIntent()而非handleActivity()
2) 在startActivityResult()前最好intent.setAction(Intent.ACTION_SEARCH) 一下。
另外,注意按该文章中提到的实现相应的newIntent()和onCreate()方法,以及在AndroidManifest.xml里设置调用者的android:launchMode="singleTop"。
80、很诡异的问题,有时EditText无法输入文字(软键盘正常弹出但字符进不去文本框),必须切换到另一个输入法才可以输入。
经测试,有些机型存在这个问题,具体原因还不详。以下链接可能与此有关:&
81、定时重复执行一段程序
要执行类似闹钟这样的功能,用AlarmManager配合BroadCastReceiver即可,网上有很多例子不再赘述。值得一提的是,在这个BroadCastReceiver里不要执行异步操作(例如异步访问一个远程服务、获取当前位置等等),因为onReceive()方法一旦执行结束,用于容纳BroadCastReceiver的进程随时可能被系统kill掉,导致异步操作结束后出现异常。解决的办法是在onReceive()方法里启动一个Service(我用的是startService,用bindService的方式可能也行),在Service里执行任何操作就可以了。参考
82、Monkey测试
&adb shell monkey -v -p com.my.app 100
MonkeyRunner可以进行更高级的测试。&
83、用getIntent().getExtras().clear()无法清除掉extras里的数据
原因是getExtras()返回的是一个copy实例,用getIntent().removeExtra()可一个个清除。&
84、用AlertDialog实现输入对话框时,若直接builder.setView(myEditText)文本框显得太长。
用dialog.setView()可以指定padding(注意是dialog.setView()而不是builder.setView()),具体见。
85、在TextView里显示图片
通过Html.fromHtml()方法可以在TextView里显示HTML格式的文本,但只支持部分tag:
myTextVIew.setText(Html.fromHtml(myHtmlStr))
要在TextView里显示远程图片,必须向fromHtml()函数里提供一个ImageGetter对象,在它的getDrawable()方法里获取远程图像并转换为Drawable类型。示例代码请参考。
如果TextView设置了android:lineSpacingMultiplier属性,将导致图片显示的位置不正确(顶部多出一些空白),用android:lineSpacingExtra属性则没有这个问题。
如果图片加载比较慢将导致整个TextView空白很长时间,为解决这个问题需要异步加载图片,这样文字可以先出来,待图片下载完毕后再补充道文字中间。实现方法是扩展Drawable,具体方法参考这两个链接:、&,其中链接1的方案存在图片尺寸不正确的问题,原因是TextView#invalidate()没能起作用(原因不详),用链接2提供的方法可以解决,提到用textView.setText(textView.getText())也可以工作但我没试。
86、在TextView里显示列表(&li&标签)&
Android的TextView只支持一小部分的html标签(见),缺省是不支持&ol&、&ul&和&li&这样的列表标签的。通过TagHandler可以实现一个简单的列表效果(见),但这个方法有个严重问题:当列表文字超过一行时,第二行的文字是顶头的没有缩进效果(见),而该问题暂时还没有好的解决方法。&
87、百度地图android sdk问题
百度地图最大的问题:文档太烂!百度地图sdk版本比较多,网上充斥着各种版本的例子代码,官网上的例子代码也不清晰,在线文档含混不清。
遇到过一个奇怪的问题,与描述的情况相同,即第二次打开地图只能显示上次缓存过区域的地图,最后删除了所有onPause()、onResume()和onDestroy()里的百度地图相关方法才解决。
88、启用Andoird设备的otg功能
在/system/etc/permissions目录里检查是否有名为android.hardware.usb.host.xml的文件,如果没有,新建一个内容如下:
&permissions&
&feature name="android.hardware.usb.host" /&
&/permissions&
89、命令行对一个未签名apk进行签名
&jarsigner&-verbose&-sigalg&SHA1withRSA&-digestalg&SHA1&-keystore&my-release-key.keystore&my_application.apk&alias_name&
90、Pull-to-refresh控件不显示内容问题
将ListView替换为PullToRefreshListView,setAdapter()后发现列表中没有数据显示,调试发现adapter里是有数据的,而listView的getView()方法没有被执行到。最后发现原因是在布局文件的&com.handmark.pulltorefresh.library.PullToRefreshListView&元素中指定了android:visibility="gone"属性(在.java文件里在setAdapter()之前先调用了listView.setVisibility(View.VISIBLE)),在布局文件里去掉此属性,改为在activity的onCreate()里执行listView.setVisibility(View.GONE)后恢复正常,没有深入调查这两种方式对PullToRefreshListView有什么区别,对标准ListView是没有区别的。
91、切换fragment时fragment显示不全
在fragmentTransaction.replace(R.id.layoutRoot, newTransaction)时,发现当layoutRoot是LinearLayout时,(有时)newTransaction的高度无法充满layoutRoot(虽然已经指定了高度为match_parent,指定高度为固定值也无效),后来将layoutRoot改为FrameLayout问题解决。
92、利用Activity的android:process属性
在开发一个视频播放器过程中,遇到一个问题,当视频还在缓冲时按返回键退出当前activity,应用失去反应长达数秒。后来在AndroidManifest.xml里对这个activity增加了android:process=":player"后问题解决,因为这个属性使得此activity在一个独立的进程运行,当activity被关闭时,此进程也被杀掉。这样,即使播放器有未完成的工作,也不会影响到主程序的UI线程了。
需要注意,用PreferenceManager.getDefaultSharedPreferences()得到的SharedPreferences实例,是不支持跨进程访问的,因此在独立的进程里将无法向这样获得的SharedPreferences实例存取数据。解决的办法是改为使用context.getSharedPreferences(prefName, Context.MODE_MULTI_PROCESS)获取SharedPrefences实例。
不过还是要特别注意,在多进程环境下,如果你用一个静态变量缓存了SharedPreference里的内容,由于静态变量在多个进程间不是共享的(Application对象也不是跨进程共享的),所以取出的结果可能不是你想要的。解决办法 1)去掉这个作为缓存的静态变量,每次都直接从SharedPreferences里取 2) 有人建议使用作为跨进程的机制,但我没有实际测试过,而且用起来应该会比Application对象繁琐。
93、Service的START_STICKY与START_NOT_STICKY的区别
参考:当系统由于资源不足可能会杀掉一个service,之后如果系统又有了足够资源,若被杀掉的service是START_STICKY的,则系统会调用其onStartCommand()方法恢复这个service;若被杀掉的service是START_NOT_STICKY的,则系统不会尝试恢复这个service。
94、如何用纯java的方式获取apk文件版本信息?
apk文件就是zip文件,解析并读取AndroidManifest.xml里的信息即可。开源项目已经实现了这个功能,可以直接在java项目里使用。
95、Android手机使用https代替http会带来明显的性能问题吗?
对CPU消耗来讲,不会。见
对网络消耗来讲,有一些影响。见
关于在手机端&接受所有证书&做法的安全性,见。
注意:ssl处于tcp和http之间,使用https后,url也是加密过的,因此不需要担心api地址暴露(浏览器历史除外)。
96、代码混淆
将project.properties里的#proguard.config=xxx这句前面的#去掉即可。会按照android sdk目录里的proguard-android.txt设置文件进行混淆,如果项目有特殊要求,在项目目录下的proguard-project.txt里进行设置。有两点注意:
1) 只有在正式export apk时才会进行混淆,直接运行产生的bin/xxx.apk不会进行混淆;
2) library工程里的混淆设置不起作用,以宿主工程的设置为准。
97、Fragment里getActivity()有时为null
一般当activity所在进程在后台被系统回收,然后用户重新回到这个进程时,activity重建后发生。解决方法是在activity的onSaveInstanceState()方法里保存fragment的状态:
public void onSaveInstanceState(Bundle outState) {
activity.getSupportFragmentManager().putFragment(outState, "current_fragment", currentFragment);
&然后在activity的onCreate()方法里恢复:
if (savedInstanceState != null) {
currentFragment = (Fragment) activityBase.getSupportFragmentManager().getFragment(savedInstanceState, "current_fragment");
这样currentFragment所代表的fragment实例的getActivity()就不为null了。
98、分级Preference界面布局的实现方式
引用的总结:Android 3.0之前:采用PreferenceScreen嵌套的方法;Android 3.0及之后:采用Preference Headers的方法。
采用Preference Headers方法时,要求继承PreferenceActivity,但这样就无法同时继承ActionbarActivity了()。第三方library可以基本解决这个问题。
99、自定义进度条progressbar的风格
这篇文章总结得很好,特记录在此:
100、Color State List不能用于android:background属性
Android似乎不支持在android:background里指定Color State List资源(例如android:background="@color/bg_button_selector"会导致崩溃,但android:background="#ff0000"是可以的),得用Drawable State List才行,例如android:background="@drawable/bg_button_selector"。
(未完待续)&
阅读(...) 评论()

我要回帖

更多关于 android开发有前途吗 的文章

 

随机推荐