BUG 收集

来源:互联网 发布:网络跳线架 编辑:程序博客网 时间:2024/06/11 03:06

之前遇到一些开发中的问题,没有及时记下来,后来就忘了是什么问题。

现在把细小的点也记下,方便查看,避免错误。

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去掉锯齿
两种方式:

//利用Paintpaint.setAntiAlias(true);paint.setFlags(Paint.ANTI_ALIAS_FLAG);//利用CanvasDrawFilter 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、后续更新

0 0
原创粉丝点击