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