- 使用静态变量来缓存数据时,不管是在Application类还是其他类,都要注意因应用重建而引发的问题。
- 使用DecorView作为PopupWindow的anchorView时,在华为P7中它是显示在系统状态栏下方的(Android 5.1.1系统),在华为3C,三星S4,红米Note2(5.0.2)上表现正常。
- 裁剪图片并且以bitmap返回时,如果你调用的是系统的裁剪功能,当图片过大时在米3当中将会导致系统的裁剪图片应用引发
TransactionTooLargeException
异常,并且不断重试,且需要重启手机才能恢复。大图的裁剪建议使用URL而不是直接返回数据。 - 不要使用
Build.FINGERPRINT
的值是否为"unknown"
或是否以其开头来判断是否为模拟器,因为魅蓝的这个字段就是unknown。 - bitmap如果是alpha图,rgb储存的是预乘了alpha的数值(来自QQ群242876551)
- 重度使用Fragment者,在Fragment中使用SurfaceView(包括3D地图)时需注意机型的兼容,有可能出现部分机型中从其他Activity回来时,surfaceview的绘制会覆盖到最上面(仅仅是画面覆盖到其他控件上面,但不影响其他控件),在米2,三星S4上出现过,偶发。
- 不要在Activity或Fragment没有完全显示时弹出PopupWindow,如果需要,使用其中的
view.post(runnable)
方法来执行弹出的代码。 - 有虚拟导航栏的手机,使用
showAsDropDown
弹出的高度为MATCH_PARENT
的PopupWindow的底部会被虚拟导航栏所覆盖。 - 更改应用图标之后,小米的ROM的桌面图标是没有更新的,需要切换主题或重启。
调用
RadioGroup.check(int id)
时,RadioGroup.OnCheckedChangeListener. onCheckedChanged(RadioGroup group, int checkedId);
会被调用多次。源码如下:java
public void check(int id) {
// don’t even bother
if (id != -1 && (id == mCheckedId)) {
return;
}
if (mCheckedId != -1) {
setCheckedStateForView(mCheckedId, false);
}
if (id != -1) {
setCheckedStateForView(id, true);
}
setCheckedId(id);
}其中:
setCheckedStateForView(mCheckedId, false);
会导致onCheckedChanged(RadioGroup group, int checkedId)
被调用,传的id是上一次被选中的id,其获取到的选中状态为false。setCheckedStateForView(id, true);
会导致onCheckedChanged(RadioGroup group, int checkedId)
被调用,传的id是本次被选中的id,其获取到的选中状态为true。setCheckedId(id);
会直接回调onCheckedChanged(RadioGroup group, int checkedId)
,与上一条一样,传的id是本次被选中的id,其获取到的选中状态为true。
使用满屏的对话框,显示之后,在华为P7(5.1.1)上锁屏再解锁,下面的内容会少掉大约系统状态栏的高度的内容。非必现,但概率极高。
- 竖屏拍照时设置相机旋转,在手里的三星S4上拍的照还是横着的,它只是写入旋转的Exif信息。
- 在酷派手机上,拍照时如果PreviewSize和PictureSize相差太大时,生成的图片的拍摄范围可能和预览的拍摄范围不一样(可能比预览的范围小)。
- 对一个Bitmap,调用Bitmap.create(xxx)方法创建一个新的bitmap,并设置到ImageView上,如果回收旧的bitmap,在手里的华为3C上,ImageView无法显示图片。
- 一些手机通过
getSupportFragmentManager().beginTransaction().replace()
先后显示两个fragment之后,调用getSupportFragmentManager().getFragments()
返回的ArrayList<Fragment>
,可能size
是两个,但是第一个却是为空的。
- 在定义的shape中,如果没有通过
solid
或其他元素指定shape颜色,可能导致在部分手机上背景是黑的。包括一些View
以及LinearLayout
的divider
。 - 如果是通过
RadioGroup
及RadioButton
来实现底部Tab,则可能在一些手机上文字及drawableTop是偏向右边的,即使把gravity
属性设为水平居中。通过设置android:paddingLeft="0dp"
或android:background="@color/transparent"
可以解决。 AndroidManifest.xml
里application
节点的android:supportsRtl
属性,可能会影响到popupwindow
里TextView
的布局。我遇过它使我的TextView
的文字由居中变成了左对齐。- 华为EMUI3.1虽号称基于Android5.1,但是却不能通过调用setStatusBarColor()接口来设置系统状态栏颜色,只能通过4.4.2的方式,在StatusBar上添加一个与其同高的View来设置颜色。具体见https://github.com/msdx/status-bar-compat 。
- 魅族Flyme5.1.9对系统状态栏大改,虽然Android版本是6.0以下,但是可以使用6.0的方式来设置StatusBar颜色,但是,当有多个界面切换时,StatusBar的图标及文字的颜色可能无法控制(如当切换界面时,白色的图标或文字会变成黑色)。
- LinearLayout设置分割线,
showDividers="middle|end"
,当最后一个View设置为GONE
时会导致最后一条分割线不显示出来。解决方法是设置showDividers="middle"
,然后在LinearLayout里面最后添加一个没有内容的View。具体参考:http://stackoverflow.com/questions/24187698/bottom-divider-is-missing-when-visibility-of-the-last-view-is-set-to-gone-in-lin#answer-24189135 。 - 数字前面加“+”号的字符串,如“+00”,转换为int类型,在Android 4.4.2中会报
java.lang.NumberFormatException: Invalid int: "+00"
,但在Android 5.1中可以正确被转换(Java7新特性)。
欢迎补充及指正。