开发中遇到的问题(二)

1.布局遇到一个适配问题,想到的办法是:获取屏幕的高度,动态改变margin属性,这样做只能保证部分机型没有问题,还是会有问题,因为屏幕页面内容产品希望集中在相对中间的位置,所以上下留白比较多,但是对于小屏幕的手机留白就要不了那么多了,并且相对上面留白更多些,这时候可以考虑从底部向上布局,这样会根据屏幕自动去适配高度。 ----目前解决方法;
另外可以考虑用到Space控件去适配空白高度。---待尝试。


  1. 在basequickAdapter 使用的时候 默认出现了头部就不会显示Empty,和尾部,配置以下方法也支持同时显示:
    setHeaderAndEmpty
    setHeaderFooterEmpty
    默认头部尾部都是占满一行,如果需要不占满可以配置:
    setHeaderViewAsFlow
    setFooterViewAsFlow
    在项目中就是遇到 设置空布局文件 有问题就是这个的影响,还有就是空页面状态的下拉刷新也会受相应的影响。

  1. Intent传值是可以直接传ArrayList<String>类型的数据的;
    传递方式:
ArrayList<String> mPathList = new ArrayList<>();
intent.putStringArrayListExtra("pathlist", mPathList);

接收的时候:

mPathList = intent.getStringArrayListExtra("pathlist");

以上是比较基础的,下面问题来了,我们接收后一般会进行一些处理,所以这时候如果直接对mPathList进行遍历的同时 还在进行一些add 或者remove操作,就会报错 ConcurrentModificationException ,解决办法也很简单,就是在接收的时候重新定义个变量接收:

  ArrayList<String> images = new ArrayList<>(mPathList);
   mPathList.clear();

  1. 获取本地资源文件路径的方法,
   /**
     * 获取本地图片资源路径;
     * @param context
     * @param id
     * @return
     */
    public  static String getResourcesUri(Context context,int id) {
        Resources resources = context.getResources();
        String uriPath = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
                resources.getResourcePackageName(id) + "/" +
                resources.getResourceTypeName(id) + "/" +
                resources.getResourceEntryName(id);
        return uriPath;
    }
这个是有个这样的需求:本地放了几个随机的默认头像,需要检查用户有没有设置头像,如果没有设置的话需要把本地的默认头像随机一个给用户,并且把路径要存在sharepreference中,以提供给别的地方使用。

  1. 这次在做双击有心心点赞的时候,遇到个问题,引导动画显示时,需要将屏幕设置为透明度50%,但是双击点赞的这个view 是自定义view中嵌套自定义view,动画的播放控制也在自定义view中,接口实现传递比较啰嗦,所以就想到了在子view中获取根布局,最后实现的方式是,在activity的layout文件中添加一个view是半透明的,在子view中获取根布局后再找到半透明view,在动画开始的时候控制半透明view显示,结束时隐藏。
    这里主要写下获取根布局的方法:
private  View getRootView(Context context) {
        Activity activity = (Activity) context;
        return activity.getWindow().getDecorView().findViewById(android.R.id.content);
    }

  1. Q:杀死进程执行的生命周期?
    A:
    1)当Android通过杀进程的APP杀死进程后,会执行ondestroy方法,当onDestroy方法执行完成后才彻底杀死进程!
    2)注意:点击按钮清理后台数据的时候每一个activity都会执行onDestroy方法,但是通过滑动卡片删除应用杀死进程的时候,或者通过应用管理杀死进程的时候,只有Task栈里面的第一个没有销毁的Activity执行onDestroy方法,一般都是mainActivity,其它Activity均不执行onDestroy。
    3)注意:如果希望在ondestroy 方法中执行一些元素的更改,那么一定一定一定要写在super.ondestroy()之前,在之后的是不会执行的。

  1. Glide的用法:
    前两天有个需求:需要将图片加水印后展示;看着这个需求很简单,但是却折腾半天,原因是因为不了解Glide的基础用法;
    在使用Glide获取Bitmap对象时,使用的方法是Glide.with(context).load(url).asBitmap().into(width, height).get();
    这个用的话一点儿问题都没有,但是我却用在了主线程去直接使用,然后并没有报错,但是获取的Bitmap 一直是null,后来看源码才发现这个问题,后来改用了带回调的方法:
Glide.with(getApplicationContext()).load(imageUrl).asBitmap().into(new SimpleTarget<Bitmap>() {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
        if (resource != null) {
            iv_share_pic.setImageBitmap(resource);
        }

    }
});
  一句话总结:注意api 使用限制条件。该在子线程使用,要在子线程使用,不能想当然。(╥╯^╰╥)

7.获取控件宽高的正确打开方式:
第一种方式:

 ViewTreeObserver viewTreeObserver=iv_share_pic.getViewTreeObserver();
        viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                iv_share_pic.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                int height = iv_share_pic.getMeasuredHeight();
                int width = iv_share_pic.getMeasuredWidth();
             
            }
        });

第二种方式:

 @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        if(hasFocus){
          int  picHeight = iv_share_pic.getMeasuredHeight();
          int  picWidth = iv_share_pic.getMeasuredWidth();
          
        }
    }

需要注意的是:
1)获取控件的宽高要在控件加载完成后再进行,这个时机一定要把握好,比如还有一种方式我直接在onCreate中做postDelay 去获取控件的宽高,其实也是一样的道理,都是为了让控件加载完毕,执行过onLayout方法;
2)刚开始我犯了一个错误就是一直在使用LayoutParams 去获取,比如:

   ViewTreeObserver viewTreeObserver=iv_share_pic.getViewTreeObserver();        
    viewTreeObserver.addOnGlobalLayoutListener(new 
   ViewTreeObserver.OnGlobalLayoutListener() {
           @Override
          public void onGlobalLayout() {
             ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) iv_share_pic.getLayoutParams();
     int height = params.height;
     int width = params.width;           
  iv_share_pic.getViewTreeObserver().removeGlobalOnLayoutListener(this);
           }
       });

这样获取到的宽高永远是0 和-1 这个以后注意下。具体原因后面再写。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容