之前遇到一些开发中的问题,没有及时记下来,后来就忘了是什么问题。
现在把细小的点也记下,方便查看,避免错误。
1、xml中根节点无法通过findviewbyid找到,这里遇到的空指针debug才发现。
例如,
根节点为FrameLayout,id为main_container,
在当前Fragment的onCreateView()方法中,应该直接通过inflate给view赋值,
mContainer = (FrameLayout) inflater.inflate(Res.layout(container.getContext(), "fragment_main"), container, false);
这样再向mContainer中addView,不至于空指针:
mContainer.addView(opPromotionView.getView());
2、onCreateOptionsMenu和onPrepareOptionsMenu
- onCreateOptionsMenu
只执行一次 - onPrepareOptionsMenu
每次display menu之前调用一次,用来做update menu的动作. - 清空操作:menu.clear();
参考:http://blog.csdn.net/shichaosong/article/details/7309723
3、用java代码实现布局,addRule的用法
//示例:水平居中、位于下方
int width = getResources().getDisplayMetrics().widthPixels;
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(width / 2, (int) (0.77 * width / 2));
lp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
imgWifi.setLayoutParams(lp);
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(width * 2 / 3, 140);
lp1.topMargin = 40;
lp1.addRule(RelativeLayout.BELOW, Res.id(this, "tv_msg"));
lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
settingWifiBtn.setLayoutParams(lp1);
//沿着父容器底部
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,1);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);//作用同xml中layout_alignParentBottom
if (isLastChild) {
params.setMargins(0, 0, 0, 0);//最后一个孩子节点的下边线要齐头
} else {
params.setMargins(200, 0, 0, 0);
}
holder.divider.setLayoutParams(params);
4、自定义View去掉锯齿
两种方式:
//利用Paint
paint.setAntiAlias(true);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
//利用Canvas
DrawFilter pfdf = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
canvas.setDrawFilter(pfdf);
5、ImageView的ScaleType属性
设置方式:
(1) 在layout xml中定义Android:scaleType=”CENTER”
(2) 或在代码中调用imageView.setScaleType(ImageView.ScaleType.CENTER);
ScaleType的值 | 实现的效果 | 是否等比例 |
---|---|---|
CENTER | 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 | 是 |
CENTER_CROP | 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽) | 是 |
CENTER_INSIDE | 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽 | 是 |
FIT_CENTER | 把图片按比例扩大/缩小到View的宽度,居中显示 | 是 |
FIT_START | 图片缩放效果上与FIT_CENTER一样,只是显示的位置不同,FIT_START是置于顶部 | 是 |
FIT_END | 图片缩放效果上与FIT_CENTER一样,只是显示的位置不同,FIT_END置于底部 | 是 |
FIT_XY | 不按比例缩放图片,目标是把图片塞满整个View | 否 |
* 图片示例参见 ImageView.ScaleType设置图解
fitCenter和centerInside的区别
Tip:很多人都觉得fitCenter和centerInside没有区别,根据上面的效果图来分析,其实是有区别的。fitCenter是将原图等比例放大或缩小,使原图的高度等于ImageView的高度,并居中显示,而centerInside在原图的原本size大于ImageView的size时,则缩小原图,效果同fitCenter;在原图的原本size小于ImageView的size时,则不进行任何size处理,居中显示,效果同center。
6、制作.9图
在本机安装的AndroidSDK的sdk/tools/路径下,有自带的draw9patch。
可以直接运行之,将图片拖动进去制作.9图的黑线。
上下左右代表的含义:
- 上黑线向下覆盖的区域,表示图片横向拉伸时,只拉伸该区域;
- 左黑线向右覆盖的区域,表示图片纵向拉伸时,只拉伸该区域;
- 下黑线向上覆盖的区域,表示图片横向显示内容;
- 右黑线向左覆盖的区域,表示图片纵向显示内容的区域.
关于工具的使用:
9-patch——Android制作可拉伸背景图
图文参见: Android .9文件及制作方法
7、使用SparseArray替换HashMap
Android应用性能优化之使用SparseArray替代HashMap
8、后续更新