美文网首页
Android获取Drawable=ContextCompat.

Android获取Drawable=ContextCompat.

作者: 苍蝇的梦 | 来源:发表于2016-11-24 17:04 被阅读1486次

    2016-11-23遇到的一点小问题

    RecyclerView使用GridLayoutManager添加分隔线

    今天为RecyclerView添加分隔线,用的GridLayoutManager,因为考虑列开头、结尾和中间距离要不一样,不同列得区别对待,所以没法像LinearLayoutManager那样直接设置layout_margin或弄个View,因为要在RecyclerView.Adapter<RecyclerView.ViewHolder>的onBindViewHolder中写一堆判断,所以用的网上找的自定义RecyclerView.ItemDecoration来实现,这个网上一找一堆
    http://www.jianshu.com/p/4eff036360da
    http://www.cnblogs.com/huolongluo/p/5879292.html
    http://blog.csdn.net/lmj623565791/article/details/45059587
    主要就是在getItemOffsets(Rect outRect, View view, RecyclerView parent, State state)设置绘制位置,设置时区分是否最后行和最后列,是的话位置为默认的0,
    在滑动显示时根据onDraw(Canvas c, RecyclerView parent, State state)设置绘制的分隔线样式。
    分隔线样式可以通过修改Activity主题的<item name="android:listDivider">@drawable/aaa</item>来修改,也可以通过drawable对象来修改,还可以只通过颜色和尺寸来修改。
    不过这样子还是有问题,因为这个和设置margin类似,前面正常绘制,最后一列不绘制,所以最后还是会比前面的宽一点点。所以感觉还是尽量设置margin省事。

    使用ContextCompat.getDrawable获取Drawable

    之前获取Drawable都是
    Drawable drawable = getResources().getDrawable(R.drawable.a);
    不过这方法过时了,而新方法
    Drawable drawable = getDrawable(R.drawable.a);
    这个点开其实就是
    Drawable drawable = getResources().getDrawable(R.drawable.a,getTheme());
    不过两个都是得API21才能用,每次都是

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    }else{
    }
    

    然后在看分隔线时看到别人是这样的
    Drawable drawable = ContextCompat.getDrawable(context,R.drawable.a);
    是在V4包里面的android.support.v4.content,很好,不用管版本了,以后就用这个。

    相关文章

      网友评论

          本文标题:Android获取Drawable=ContextCompat.

          本文链接:https://www.haomeiwen.com/subject/zxgbpttx.html