各位看官老爺子你們好,我就是那個挖坑不埋嘹锁,還喜歡開新礦的小喵同志。
問大家一個問題压昼,在Github上找項目的時候瘤运,看到中文簡介說明你們是不是覺得這個項目很low不屑一顧匠题?
最近朋友無意中說,在Github上看到中文的項目點都不想點進去郁季,太low了钱磅。想想好像很多大神的項目都是純英語的,so盖淡,作為只有四級程度的小同志褪迟,我就是那個項目里彌漫著中文的家伙(ノQ益Q)ノ彡┻━┻答憔,你們怎么看掀抹?我挺喜歡中文的?
例牌Github:https://github.com/CarGuo :歡迎各種姿勢的star傲武,fuck,watch戒幔。
這期要聊的是那么躺在坑里的需求土童,想想這一路走來,本人還能正常的行走于人世敢订,真是好感動呢罢吃,感謝產(chǎn)品和QA的不殺之恩。
1矾柜、TextView的由于Span導(dǎo)致省略號顯示不正常問題就谜。
2、TextView容易被背景同化看不清丧荐?增加陰影吧虹统。
3、啟動白屏一會或者點擊logo卡頓很久沒反應(yīng)的暴力解決车荔。
4、打開自定義圖庫族吻,選擇圖片容易OOM,頁面崩潰回到程序crash宜雀。
5握础、ViewPager嵌套RecyclerView還有輪播圖的手勢沖突,參考:linkagescroll禀综。
6定枷、透明主題會導(dǎo)致手機背景在切換Tab的時候穿透到桌面,一般MainActivity不要用這個欠窒。
7、ViewPager的實時數(shù)據(jù)刷新型将。
8荐虐、CardView 慎用,因為在某些低版本的機器上會有白帶腕铸,需要的話可以用shape實現(xiàn)圓角铛碑。
9、圖片壓縮安利酪耳。
10刹缝、RecyclerView的回到頂部的優(yōu)化颈将。
1、之前分享過一篇文章《文本編輯和顯示(emoji表情颂砸,@某人、鏈接高亮點擊)》人乓,這里用到的Spanable替代String用于TextView的顯示色罚,一般情況下是沒什么問題的,但是如果你需要在列表中或者詳情中做省略號處理戳护,你就有可能發(fā)現(xiàn)腌且,省略號居然出現(xiàn)在表情的前面,把一大段文字給省略了铺董;又或者直接最后面顯示了一部分的表情。原因Google可閱喘鸟,這里就說說我農(nóng)村式的做法吧:
是的驻右,自己截斷,根據(jù)你需要的行數(shù)愕把,對應(yīng)的在顯示的時候把數(shù)據(jù)截斷森爽,然后自己加上···(這里如有更好的記得評論分享啊橘蜜!)
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經(jīng)常會因為背景圖片的原因而導(dǎo)致出現(xiàn)看不清文字的情況徽职,這里無數(shù)次考慮之后,決定某些特殊地方可以用輕微的陰影解決姆钉。
android:shadowColor="#AA000000"
android:shadowDy="1"
android:shadowRadius="1"
3抄瓦、啟動頁問題钙姊,其實最好是做冷啟動優(yōu)化埂伦,但是作為一個時間緊(tou)張(lan)的程序猿,我是在WelcomeActivity的主題里設(shè)置了主題立镶,暴力解決类早,雖然這不是長久之計:
<!--window背景圖-->
<style name="WelcomeActivtyTheme" parent="AppTheme">
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@drawable/welcome_png</item>
</style>
4、打開自定義圖庫OOM主要要解決的還是內(nèi)存釋放的問題缭召,有時候內(nèi)存一下子來的太猛還是不行的逆日,而且邏輯有問題的崩潰導(dǎo)致APP直接回到解放前的確得不償失,所以呢:
直接把選擇Activityyoga新的process進程打開搪哪,這樣閃退了也不影響APP啊坪圾,數(shù)據(jù)該怎么返回還是怎么返回。什么漓概?首次啟動的時候回卡白屏幾秒病梢,下面的主題暴力幫助你。什么觅彰?打開卡頓一會才能看到頁面护奈。我試了微信也會望艺,所以如果有優(yōu)化的控件記得評論分享下萝喘,這樣我可以愉悅的去找產(chǎn)品說(zhuang)教(B)梦抢。
<activity
android:name=".ImageSelectActivity"
android:process=":tools"
android:screenOrientation="portrait"
android:theme="@style/ThemeAlpha" />
···
<style name="ThemeAlpha" parent="AppTheme">
<item name="android:windowDisablePreview">true</item>
</style>
5村缸、更新ViewPager鸵闪,這里簡單上代碼,感受下蚌讼,我就靜靜的不說話.....((/- -)/:
resolveViewLogic();//比如更新list數(shù)據(jù)
fragmentPagerAdapter.setUpdateFlag(true);//讓其更新
fragmentPagerAdapter.notifyDataSetChanged();
fragmentPagerAdapter.setUpdateFlag(false);//關(guān)了
···
public class RefreshFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
private FragmentManager fragmentManager;
private boolean updateFlag;
public boolean isUpdateFlag() {
return updateFlag;
}
public void setUpdateFlag(boolean updateFlag) {
this.updateFlag = updateFlag;
}
public void setFragments( List<Fragment> fragments) {
this.fragments = fragments;
}
public RefreshFragmentPagerAdapter(FragmentManager fragmentManager, List<Fragment> 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) {//根據(jù)需求添加更新標(biāo)示
//得到緩存的fragment
Fragment fragment = (Fragment) super.instantiateItem(container, position);
//得到tag芥喇,這點很重要
String fragmentTag = fragment.getTag(); //這里的tag是系統(tǒng)自己生產(chǎn)的凰萨,我們直接取就可以
//如果這個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的回到頂部的優(yōu)化。
也許你會問拾氓,不就是一鍵回去么底哥,為什么還要優(yōu)化房官?
因為愛情续滋,不會輕易悲傷,產(chǎn)品經(jīng)理都是年輕的模樣蜡峰,看看回到頂部的效果朗恳,所以就有了這個優(yōu)化:
記得先停止?jié)L動,然后回到第十個油航,然后在智能的滾到頂部臀脏,不信你試試,感覺舒服好多喲秒啦。
protected void goToTop() {
mRecyclerView.stopScroll();
mLayoutManager.setSmoothScrollbarEnabled(true);
if (firstVisibilityPosition > 10) {
mLayoutManager.scrollToPositionWithOffset(10, 0);
}
mRecyclerView.smoothScrollToPosition(0);
firstVisibilityPosition = 0;
}