Android 蹲坑的疑難雜症集錦一

 各位看官老爺子大家好,我就是那個挖坑不埋,還喜歡開新礦的小喵同志。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還有輪播圖的手勢衝突,參考:linkagescrollthis

  • 六、透明主題會致使手機背景在切換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 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); } } } 
    
   

 複製代碼

九、圖片壓縮安利: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;
}複製代碼

據說你要給吃的
相關文章
相關標籤/搜索