BUG 收集

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

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

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、后续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值