各位看官老爷子大家好,我就是那个挖坑不埋,还喜欢开新矿的小喵同志。android
问你们一个问题,在Github上找项目的时候,看到中文简介说明大家是否是以为这个项目很low不屑一顾?git
最近朋友无心中说,在Github上看到中文的项目点都不想点进去,太low了。想一想好像不少大神的项目都是纯英语的,so,做为只有四级程度的小同志,我就是那个项目里弥漫着中文的家伙(ノQ益Q)ノ彡┻━┻,大家怎么看?我挺喜欢中文的。
例牌Github:github.com/CarGuo :欢迎各类姿式的star,fuck,watch。github
这期要聊的是那么躺在坑里的需求,想一想这一路走来,本人还能正常的行走于人世,真是好感动呢,感谢产品和QA的不杀之恩。缓存
一、TextView的因为Span致使省略号显示不正常问题。微信
二、TextView容易被背景同化看不清?增长阴影吧。app
三、启动白屏一会或者点击logo卡顿好久没反应的暴力解决。ide
四、打开自定义图库,选择图片容易OOM,页面崩溃回到程序crash。优化
五、ViewPager嵌套RecyclerView还有轮播图的手势冲突,参考:linkagescroll。this
六、透明主题会致使手机背景在切换Tab的时候穿透到桌面,通常MainActivity不要用这个。spa
七、ViewPager的实时数据刷新。
八、CardView 慎用,由于在某些低版本的机器上会有白带,须要的话能够用shape实现圆角。
九、图片压缩安利。
十、RecyclerView的回到顶部的优化。
一、以前分享过一篇文章《文本编辑和显示(emoji表情,@某人、连接高亮点击)》,这里用到的Spanable替代String用于TextView的显示,通常状况下是没什么问题的,可是若是你须要在列表中或者详情中作省略号处理,你就有可能发现,省略号竟然出如今表情的前面,把一大段文字给省略了;又或者直接最后面显示了一部分的表情。缘由Google可阅,这里就说说我农村式的作法吧:
是的,本身截断,根据你须要的行数,对应的在显示的时候把数据截断,而后本身加上···(这里若有更好的记得评论分享啊!)
textView.setText(spannable);
textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
textView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
if (textView.getLineCount() > lineCount) {
int endOfLastLine = textView.getLayout().getLineEnd(lineCount - 1);
if (endOfLastLine > 4) {
CharSequence newVal = textView.getText().subSequence(0, endOfLastLine - 4);
textView.setText(newVal);
textView.append("...");
}
}
}
});复制代码
二、TextView常常会由于背景图片的缘由而致使出现看不清文字的状况,这里无数次考虑以后,决定某些特殊地方能够用轻微的阴影解决。
android:shadowColor="#AA000000"
android:shadowDy="1"
android:shadowRadius="1"复制代码
三、启动页问题,其实最好是作冷启动优化,可是做为一个时间紧(tou)张(lan)的程序猿,我是在WelcomeActivity的主题里设置了主题,暴力解决,虽然这不是长久之计:
复制代码
四、打开自定义图库OOM主要要解决的仍是内存释放的问题,有时候内存一会儿来的太猛仍是不行的,并且逻辑有问题的崩溃致使APP直接回到解放前的确得不偿失,因此呢:
直接把选择Activityyoga新的process进程打开,这样闪退了也不影响APP啊,数据该怎么返回仍是怎么返回。什么?首次启动的时候回卡白屏几秒,下面的主题暴力帮助你。什么?打开卡顿一会才能看到页面。我试了微信也会,因此若是有优化的控件记得评论分享下,这样我能够愉悦的去找产品说(zhuang)教(B)。
··· 复制代码
五、更新ViewPager,这里简单上代码,感觉下,我就静静的不说话.....((/- -)/:
resolveViewLogic();//好比更新list数据 fragmentPagerAdapter.setUpdateFlag(true);//让其更新 fragmentPagerAdapter.notifyDataSetChanged(); fragmentPagerAdapter.setUpdateFlag(false);//关了 ··· public class RefreshFragmentPagerAdapter extends FragmentPagerAdapter { private Listfragments; private FragmentManager fragmentManager; private boolean updateFlag; public boolean isUpdateFlag() { return updateFlag; } public void setUpdateFlag(boolean updateFlag) { this.updateFlag = updateFlag; } public void setFragments( List 复制代码fragments) { this.fragments = fragments; } public RefreshFragmentPagerAdapter(FragmentManager fragmentManager, List fragments) { super(fragmentManager); this.fragments = fragments; this.fragmentManager = fragmentManager; } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { return ""; } //让其更新 @Override public int getItemPosition(Object object) { return POSITION_NONE; } //核心方法 @Override public Object instantiateItem(ViewGroup container, int position) { if (updateFlag) {//根据需求添加更新标示 //获得缓存的fragment Fragment fragment = (Fragment) super.instantiateItem(container, position); //获得tag,这点很重要 String fragmentTag = fragment.getTag(); //这里的tag是系统本身生产的,咱们直接取就能够 //若是这个fragment须要更新 FragmentTransaction ft = fragmentManager.beginTransaction(); //移除旧的fragment ft.remove(fragment); //换成新的fragment fragment = fragments.get(position); //添加新fragment时必须用前面得到的tag,这点很重要 if (!fragment.isAdded()) { ft.add(container.getId(), fragment, fragmentTag); ft.attach(fragment); ft.commit(); } return fragment; } else { return super.instantiateItem(container, position); } } }
九、图片压缩安利:Luban,压缩效果然的不错,和微信一拼,就是那种长的离谱的图片压缩后效果不佳,其余都很不错,反正我是直接把里面的thirdCompress拿出来套到本身里面。
private File thirdCompress(@NonNull File file)复制代码
十、RecyclerView的回到顶部的优化。
也许你会问,不就是一键回去么,为何还要优化?
由于爱情,不会轻易悲伤,产品经理都是年轻的模样,看看回到顶部的效果,因此就有了这个优化:
记得先中止滚动,而后回到第十个,而后在智能的滚到顶部,不信你试试,感受舒服好多哟。
protected void goToTop() {
mRecyclerView.stopScroll();
mLayoutManager.setSmoothScrollbarEnabled(true);
if (firstVisibilityPosition > 10) {
mLayoutManager.scrollToPositionWithOffset(10, 0);
}
mRecyclerView.smoothScrollToPosition(0);
firstVisibilityPosition = 0;
}复制代码