1、什么是Dip和Sp
过去,程序员经常以像素为单位设计计算机用户界面,例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素,图标大小为16x16像素等,这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面显得很小。在有些情况下,用户界面可能会小到难以看清内容。
?
与分辨率无关的度量单位可以解决这个问题,Android支持下列所有的单位
- px(像素):屏幕上的点
- in(英寸):长度单位
- mm(毫米):长度单位
- pt(磅):1/72英寸
- dp(与密度无关的像素):一种基于屏幕密度的抽象单位,在每英寸160点的显示器上,1dp=1px
- dip:与dp相同,多用于google示例中
- sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放
为了使用户界面能够在现在和将来的显示器上正常显示,建议始终使用sp作为文字大小的单位,将dip作为其他元素的单位。当然,也可以考虑使用矢量图像,而不是位图
?
2、Dialog样式的Activity
在res/values/strings.xml中设置要显示的字符串如下:
?<string name="mytext">\dddddddddddddddddddddddddddddddddddd.dddddddddddddddddddddddddddddddddddd.html tag(<i>hualang</i>)</string>?
上述就是个测试,在string标签后加入反斜杠字符(\)是避免了在第一个单词的前面出现额外的空行
在注册这个Activity的时候在AndroidManifest.xml中写入如下:
<activity android:name=".Another" android:theme="@android:style/Theme.Dialog"></activity>
?运行效果如下:
?
3、利用日志消息调试程序
- Log.e():错误
- Log.w():警告
- Log.i():信息
- Log.d():调试
- Log.v():详细
4、利用调试器调试程序
除了日志消息以外,还可以使用eclipse调试器设置断点,单步执行以及查看程序状态。首先,通过在AndroidManifest.xml
文件中添加android:debuggable="true"选项,使项目支持调试
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
?
5、为什么有时在屏幕旋转后程序重新播放视频
默认情况下,Android假定程序对于屏幕旋转一无所知。为了处理可能的资源变化,Android销毁并从头重建你的活动。这意味着要再次调用onCreate()方法,也意味着要重新开始播放视频。
这种处理方式使用于90%的应用程序,因此大多数开发人员不必关心这一问题,对于测试应用程序的声明周期和状态保存/恢复代码,这甚至是一种有用的方法。但是,还有一些更好的办法能优化视频的转换。
最简单的办法是在活动中实现onRetainNonConfigurationInstance()方法,以保存一些对onDestroy()和onCreate(0方法的多次调用中需要保持的数据。在返回时,你可以在活动的新实例中使用getLastNonConfigurationInstance()方法恢复这些信息。可以保存任何信息,甚至包括对当前一度的引用和正在运行的线程。
更复杂的方法是在AndroidManifest.xml文件中使用adnroid:configChanges=特性,这种形式将你可以处理的变化通知Android。例如,如果将特性设为keyboardHidden|orientation,那么当用户翻转键盘时,Andorid将不会销毁和创建活动。相反,Android将调用onConfigurationChanged(Configuration)方法,并假定你知道自己如何处理。
?