Android 重構學院新聞 App 記錄

前言

Android 已經到了material design 了,而我的應用還是老樣式,所以想基於最新的控件重構一下代碼,這兒做下記錄。

  • AppCompatActivity代替了 Activity
  • RecyclerView 代替了 ListView,方便實現瀑布流、九宮格形
  • ToolBar 代替 ActionBar
  • 新的 Dialog 對話框
  • support V7 是最低兼容 Android 2.1 (API level 7) ,V4 是兼容Android 1.6 (API level 4)
  • NavigationView

改變 ToolBar 的顏色

將小圓點置爲白色

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    android:contentInsetRight="0dp"
    android:contentInsetEnd="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetEnd="0dp"   
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:layout_scrollFlags="scroll|enterAlways">
</android.support.v7.widget.Toolbar>

To Do

查看 fresco 源碼,注意是緩存這兒的實現

對於 android 插入 sqlite 數據庫 ,有使用註解的方法實現,可以使用這個庫
https://github.com/pardom/ActiveAndroid

jsoup 的源碼,深度遍歷 dom

新聞詳情左右滑動,上一個新聞,下一個新聞

報警系統,如果頁碼解析不一致,就發送郵件給我

發送郵件報警

基於 javamail,計算方法調用,時間戳,原始頁面

也可以有另外一種方案,把爬蟲記錄都保存在數據庫裏面,加一個失敗或者成功的 field。循環監聽這個數據庫,如果有失敗的記錄,再去找相應的 log,把 log 文件發出到郵件。

圖片地址一般是相對路徑 /uploads/image/20141120/**3831_60451.png
但偶爾也會是絕對路徑 http://see.xidian.edu.cn/uploads/image/20141120/201**1.png
或者說其他網站的圖片鏈接 http://blog.csdn.net/never_cxb

  • 場景1 比如圖片不一定都是相對地址,存放在/upload 文件夾下面,可能是外網的圖片,這時候對於特殊的圖片 url 需要發到郵箱審覈一下。
  • 場景2

Quartz 實現定時任務

每天晚上凌晨爬蟲,定時任務

架構

model -> javabea 一些 Article 類
adapter -> 存放 recycleView 的 adapter

功能的

沉浸式佈局

android.support.v4.view.ViewPager 實現了圖片輪播效果,Timer 實現了自動輪播,複寫了ViewPager.OnPageChangeListener的onPageScrollStateChanged(int state)實現了首尾切換圖片的效果

Android Support Design 中的 TabLayout 實現頂部欄目左右滑動切換效果

AsyncTask異步獲取圖片

利用 View 劃一條橫線

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp"
    android:background="@color/colorAccent" />
    //獲取 fragment 依賴的 Activity,方便使用 Context
    private Activity mAct;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_one_latest,container,false);
        mAct = getActivity();
        return view;
    }

Toolbar

mToolbar = (Toolbar) findViewById(R.id.toolbar);
// toolbar.setLogo(R.drawable.ic_launcher);
mToolbar.setTitle("Rocko");// 標題的文字需在setSupportActionBar之前,不然會無效
// toolbar.setSubtitle("副標題");
setSupportActionBar(mToolbar);
/* 這些通過ActionBar來設置也是一樣的,注意要在setSupportActionBar(toolbar);之後,不然就報錯了 */
// getSupportActionBar().setTitle("標題");
// getSupportActionBar().setSubtitle("副標題");
// getSupportActionBar().setLogo(R.drawable.ic_launcher);

上面關鍵的一點就是setSupportActionBar(mToolbar);把Toolbar當做ActionBar給設置了

Android Material Design之Toolbar與Palette實踐 http://blog.csdn.net/bbld_/article/details/41439715

遇到的坑

java.lang.IllegalStateException: ScrollView can host only one direct child

ScrollView裏面只能有一個元素,viewpager + Recyclerview 都嵌套在裏面是不行的

有用網址

ButterKnifeZelezny 利用註解方便獲取 ID
https://github.com/avast/android-butterknife-zelezny

material 在線搭配,可以獲取顏色編碼,xml 或
http://www.materialpalette.com/

國外的圖標庫,選中和未選中狀態下圖標是不同的
http://www.icons4android.com/

來自阿里的圖標庫 http://www.iconfont.cn/

這裏寫圖片描述

這裏寫圖片描述

發佈了198 篇原創文章 · 獲贊 179 · 訪問量 91萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章