想实现自动缩放字体大小的功能,无论用第三方的控件还是AppCompatTextView
都遇到一个问题:在滚动列表视图中显示有问题,在滚动过程中,明明有更大空间却用了一个小字体。没有时间细查实现,想着很简单就造个轮子。
RecyclerView区分视图类型的Divider
我们都知道support库有一个DividerItemDecoration, 可以作为Item之间的分隔线(divider)。但它作用以后所有的item之间都会有这个分隔线,实际情况往往是:recyclerView中存在多种的视图类型(viewType), 我们只是需要在某一类型的视图后添加分隔线。
只包裹文本的BackgroundColorSpan
BackgroundColorSpan
可以实现文本加底色的一个效果,没有问题,然而问题是文本增加间距的时候效果会变成这样:
重用LayoutManager
在RecyclerView嵌套RecyclerView的情况中,里层RecyclerView(Secondary RecyclerView)所在的ViewHolder将会与数据进行绑定,它当然需要设置一个LayoutManager。然而在onBindViewHolder方法中创建LayoutManger实例毕竟不太好,每次调用onBindViewHolder都有实例生成容易产生内存碎片。于是每个数据Item去持有一个LayoutManger实例是自然而然的。但是问题来了:
TextView多行文本Ellipsize的终极解决方案
Android的TextView提供了ellipse的功能,就是在文本超过指定行数maxLine后增加...
,然而当setText
传入是spannable类型的时候,这个功能无法生效。spannable中会包含不少信息,图片,下划线等等,给解决这个问题又增加了不少难度。微信朋友圈的"全文/收起"根本没加...
。网上有很多人试图解决这个问题,有重写类的,例如 https://stackoverflow.com/a/6763689, 有添加布局监听的,如 https://stackoverflow.com/a/30446822, 但实践下来没一个好用的!只好自己想法。
GestureDetector无法取消长按
期望对RecyclerView中的item可以做单击, 长按, 和拖拽操作, 利用OnItemTouchListener
可以达到一个在外部总控的目的。一般的对Item的操作都是在Item内部定义一个OnClickListener,如果Item的点击之类的操作与外部无关并且Item内部状态各不相同, 那这样做是最好的,但如果需要和外部关联并且这些操作不会对个别的Item另作处理,这样做就有些不足,通常这样的操作是各个Item持有同一个操作实例, 这就是所谓“外部总控”。
Fedora轻松安装与配置
主要是用来做点记录,长点记性,不然每次都从头开始安装的时候都忘记一些小点,结果把整个过程拖的老长,浪费了不少时间。
OpenGL的左下坐标原点转成窗口系统的左上坐标
想当然的写成gluOrtho2D(0, width, height, 0);
但这是不对的。验证的方法是,只要画四条直线, width, height分别是窗口宽高: