各位看官老爷子你们好,我就是那个挖坑不埋,还喜欢开新矿的小喵同志。

 问大家一个问题,在Github上找项目的时候,看到中文简介说明你们是不是觉得这个项目很low不屑一顾?

 最近朋友无意中说,在Github上看到中文的项目点都不想点进去,太low了。想想好像很多大神的项目都是纯英语的,so,作为只有四级程度的小同志,我就是那个项目里弥漫着中文的家伙(ノQ益Q)ノ彡┻━┻,你们怎么看?我挺喜欢中文的。
 
例牌Github:https://github.com/CarGuo :欢迎各种姿势的star,fuck,watch。

 这期要聊的是那么躺在坑里的需求,想想这一路走来,本人还能正常的行走于人世,真是好感动呢,感谢产品和QA的不杀之恩。

  • 1、TextView的由于Span导致省略号显示不正常问题。

  • 2、TextView容易被背景同化看不清?增加阴影吧。

  • 3、启动白屏一会或者点击logo卡顿很久没反应的暴力解决。

  • 4、打开自定义图库,选择图片容易OOM,页面崩溃回到程序crash。

  • 5、ViewPager嵌套RecyclerView还有轮播图的手势冲突,参考:linkagescroll

  • 6、透明主题会导致手机背景在切换Tab的时候穿透到桌面,一般MainActivity不要用这个。

  • 7、ViewPager的实时数据刷新。

  • 8、CardView 慎用,因为在某些低版本的机器上会有白带,需要的话可以用shape实现圆角。

  • 9、图片压缩安利。

  • 10、RecyclerView的回到顶部的优化。

1、之前分享过一篇文章《文本编辑和显示(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("...");
}
}
}
});

2、TextView经常会因为背景图片的原因而导致出现看不清文字的情况,这里无数次考虑之后,决定某些特殊地方可以用轻微的阴影解决。

android:shadowColor="#AA000000"
android:shadowDy="1"
android:shadowRadius="1"

3、启动页问题,其实最好是做冷启动优化,但是作为一个时间紧(tou)张(lan)的程序猿,我是在WelcomeActivity的主题里设置了主题,暴力解决,虽然这不是长久之计:


4、打开自定义图库OOM主要要解决的还是内存释放的问题,有时候内存一下子来的太猛还是不行的,而且逻辑有问题的崩溃导致APP直接回到解放前的确得不偿失,所以呢:

 直接把选择Activityyoga新的process进程打开,这样闪退了也不影响APP啊,数据该怎么返回还是怎么返回。什么?首次启动的时候回卡白屏几秒,下面的主题暴力帮助你。什么?打开卡顿一会才能看到页面。我试了微信也会,所以如果有优化的控件记得评论分享下,这样我可以愉悦的去找产品说(zhuang)教(B)。


···

 
5、更新ViewPager,这里简单上代码,感受下,我就静静的不说话.....((/- -)/:

 resolveViewLogic();//比如更新list数据
fragmentPagerAdapter.setUpdateFlag(true);//让其更新
fragmentPagerAdapter.notifyDataSetChanged();
fragmentPagerAdapter.setUpdateFlag(false);//关了 ···
public class RefreshFragmentPagerAdapter extends FragmentPagerAdapter { private List fragments;
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);
}
}
}

9、图片压缩安利:Luban,压缩效果真的不错,和微信一拼,就是那种长的离谱的图片压缩后效果不佳,其他都很不错,反正我是直接把里面的thirdCompress拿出来套到自己里面。

private File thirdCompress(@NonNull File file)

10、RecyclerView的回到顶部的优化。

 也许你会问,不就是一键回去么,为什么还要优化?
 
 因为爱情,不会轻易悲伤,产品经理都是年轻的模样,看看回到顶部的效果,所以就有了这个优化:

 记得先停止滚动,然后回到第十个,然后在智能的滚到顶部,不信你试试,感觉舒服好多哟。

protected void goToTop() {
mRecyclerView.stopScroll();
mLayoutManager.setSmoothScrollbarEnabled(true);
if (firstVisibilityPosition > 10) {
mLayoutManager.scrollToPositionWithOffset(10, 0);
}
mRecyclerView.smoothScrollToPosition(0);
firstVisibilityPosition = 0;
}

Android 蹲坑的疑难杂症集锦一的更多相关文章

  1. Android实用代码模块集锦

    1. 精确获取屏幕尺寸(例如:3.5.4.0.5.0寸屏幕) 1 2 3 4 5 6 public static double getScreenPhysicalSize(Activity ctx)  ...

  2. 转:[Android问答] 开发环境问题集锦

    工欲善其事,必先利其器. 和iOS开发相比,Android的开发环境的版本比较多,随之而来的问题也多.显然,我们不应该浪费宝贵的时间在解决开发环境带来的问题上,为此本文总结了常见的开发环境问题和解决方 ...

  3. Android源码博文集锦1

    Android精选源码 功能齐全的实用Android视频播放器 实现滑动到底部,加载更多RecyclerViewDemo 使用Kotlin语言编写Android MVP案例KotlinMVPDemo ...

  4. Android源码博文集锦2

    Android精选源码 android简单易用的Gallery android漂亮的加载效果 这可能是RxJava 2.x 最好的入门教程示例代码 android图片可拖拽排序 android用几行代 ...

  5. Android源码博文集锦4

    Android精选源码 一款常见的自定义加载动画 android开源记账项目CoCoin Android自定义view:拖拽选择按钮 Android指纹识别 一个折线图,它提供了几个非常实用的功能 一 ...

  6. Android源码博文集锦3

    Android精选源码 android实现最简洁的标签(label/tag)选择/展示控件   懂得智能配色的ImageView,还能给自己设置多彩的阴影哦   NicePhoto-基于 Kotlin ...

  7. Android中SDK工具集锦

    来源:<Android 4 高级编程> Android提供的SDK中包含有很多用于设计.实现.调试应用程序的工具:比较重要的如下所述: 1. ADB工具 Android应用程序调试桥ADB ...

  8. android高级页面效果集锦

    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 一个强 ...

  9. Android开源库项目集锦

    一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的全部平台. ...

随机推荐

  1. Kafka单机环境部署

    前面说过Kafka集群环境的部署,现在主要说一下在本地测试中Kafka单机环境的部署,和前面一样首先保证zookeeper服务的正常运行,然后解压并释放kafka安装包,并放到指定位置: tar -x ...

  2. delphi cxgrid 使用方法

    delphi cxgrid 使用方法1.绑定数据 方法 cxGrid1DBTableView1.DataController.DataSource:=DataSource12.去掉"Drag ...

  3. DELPHI控件:DBLookupComboBOX组件的使用方法

    在许多数据表中,数据是以代码方式存放的,如在班级编码数据表tB03(表5.5)中,系部字段TB0309采用编码方式存放,系部真实名称则存放在系部编码表TB06.使用代码的好处是,用户可在编码表TB06 ...

  4. 算法手记 之 数据结构(堆)(POJ 2051)

    一篇读书笔记 书籍简评:<ACM/ICPC 算法训练教程>这本书是余立功主编的,代码来自南京理工大学ACM集训队代码库,所以小编看过之后发现确实很实用,适合集训的时候刷题啊~~,当时是听了 ...

  5. InnoDB O_DIRECT选项漫谈(一)【转】

    本文来自:http://insidemysql.blog.163.com/blog/static/2028340422013671186977/   最近和文件系统内核开发人员做技术交流,对O_DIR ...

  6. [ 转] [Android]多式样ProgressBar

    多式样ProgressBar 普通圆形ProgressBar 该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中. 一般只要在XML布局中定义就可以了. < ...

  7. 常用iOS第三方库以及XCode插件介绍

    第三方库 CocoaPod CocoaPod并不是iOS上的第三方库 而是大名鼎鼎的第三方库的管理工具 在CocoaPod没有出现之前 第三方库的管理是非常痛苦的 尤其是一些大型的库(比如nimbus ...

  8. SQL删除约束

    )禁止所有表约束的SQL select 'alter table '+name+' nocheck constraint all' from sysobjects where type='U' )删除 ...

  9. C++与C#对比学习:类初始化

    类和柏拉图的理念世界 我们知道面向对象编程中到处是一个个的类,但类只是个概念性的东西,不是个实体,不占内存,你没实例化之前也不能用它.只有把类实例化成一个对象后,它才是一个真正存在的实体.占有内存,能 ...

  10. sprinvMVC路径拦截

    关于这种路径的拦截: http://localhost:8080/moodleCourse-tool/scorm/23681/mod_scorm/content/1/index_SCORM.html ...