前言
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/