本文整合前面四篇的控件,再结合豆瓣读书的API,做了一个搜索书籍和查看书籍信息的Demo。

先上效果图:


##项目依赖库

dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:design:22.2.0'compile 'com.android.support:appcompat-v7:22.2.0'compile 'com.android.support:cardview-v7:22.2.0'compile 'com.android.support:recyclerview-v7:22.2.0'compile 'com.github.bumptech.glide:glide:3.6.0'compile 'de.hdodenhof:circleimageview:1.3.0'compile 'com.loopj.android:android-async-http:1.4.7'compile 'com.google.code.gson:gson:2.3'compile 'com.afollestad:material-dialogs:0.7.6.0'
}复制代码

##书籍列表

使用了RecyclerView和CardView进行布局。

RecyclerView参考文章:Material Design控件使用(一)

CardView参考文章:Material Design控件使用(三)

图片的显示,使用了glide,用法比较简单

 Glide.with(holder.ivBook.getContext()).load(book.getImage()).fitCenter().into(holder.ivBook);复制代码

##搜索书籍

  • 搜索按钮(FAB)点击后,使用material-dialogs显示dialog

    new MaterialDialog.Builder(getActivity()).title(R.string.search).input(R.string.input_hint, R.string.input_prefill, new MaterialDialog.InputCallback() {@Overridepublic void onInput(MaterialDialog dialog, CharSequence input) {if (!TextUtils.isEmpty(input)) {doSearch(input.toString());}}}).show();复制代码
  • 使用android-async-http发送HTTP请求,gson解析数据

      public static void searchBooks(String name, final IBookResponse<List<Book>> response) {RequestParams params = new RequestParams();params.put("q", name);params.put("start", 0);params.put("end", 50);client.get(getAbsoluteUrl("book/search"), params, new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {Gson gson = new Gson();JSONObject json = new JSONObject(new String(responseBody));JSONArray jaBooks = json.optJSONArray("books");List<Book> books = gson.fromJson(jaBooks.toString(), new TypeToken<List<Book>>() {}.getType());response.onData(books);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {}});}复制代码
  • 获取数据后,更新RecyclerView

    private void doSearch(String keyword) {mProgressBar.setVisibility(View.VISIBLE);Book.searchBooks(keyword, new Book.IBookResponse<List<Book>>() {@Overridepublic void onData(List<Book> books) {mAdapter = new MyAdapter(getActivity(), books);mRecyclerView.setAdapter(mAdapter);mProgressBar.setVisibility(View.GONE);}});}复制代码

##显示书籍信息
使用AppBarLayout+ TabLayout+ViewPager显示书籍信息
具体布局参考:Material Design控件使用(四)

##侧边菜单栏
菜单栏实现请参考:Material Design控件使用(二)

##动画效果
动画实现请参考:Android Material Design 动画实现

项目源码已发布到Github
APK下载地址:demo.apk
源码地址:MaterialDesignExample


扫一扫下方二维码,关注我的微信公众号(APP开发进阶),第一时间获得Android开发进阶文章

APP开发进阶

Material Design控件使用相关推荐

  1. Material Design控件使用(一)

    最近学习了一下md设计风格和相对应的控件觉得挺棒的,真希望以后能做安卓设计风格的app,只是心有鱼而力不足,虽身为安卓程序员但由于公司设计成本却每天做着iOS风格的app,这感觉真是(此处省略一万字) ...

  2. Material Design控件使用(二)

    本篇接着之前的Material Design控件总结(一)往下学习support design包下其余控件,如果对Material Design不太熟悉的同学最好把第一篇看完再来看第二篇效果更好 本篇 ...

  3. Material Design控件使用学习 TabLayout+SwipeRefreshlayout

    效果: Tablayout有点类似之前接触过的开源ViewPagerIndicator,将其与viewpager绑定,可实现viewpager的导航功能. SwipeRefreshLayout是官方出 ...

  4. android自动生成cardview,学习使用Material Design控件(三)使用CardView实现卡片效果...

    本文主要介绍CardView的使用,CardView是继承自FrameLayout,使用比较简单,只需要用CardView包含其他View就可以实现卡片效果了. 实现效果如下: 加入依赖库 depen ...

  5. Material Design控件 之 CardView

    1. 简介 CardView 是继承于 FrameLayout,官方说明它是一个带有圆角背景和阴影的Framelayout. 从英文解释它是一个卡片视图,CardView 可以作为一个子布局,也可以作 ...

  6. Material Design控件使用学习 toolbar+drawerlayout+ Snackbar

    效果 1.,导包design包和appcompat-v7 ,设置Theme主题Style为NoActionbar 2.custom_toolbar.xml <?xml version=" ...

  7. Android Material Design 控件常用的属性

    android:fitsSystemWindows="true" 是一个boolean值的内部属性,让view可以根据系统窗口(如status bar)来调整自己的布局,如果值为t ...

  8. flutter笔记4:使用material原生控件开发一个APP

    接着上一篇,我们做一个这样的APP: 开始之前,我发现了一个好玩的东西,每次我们在终端中输入命令: flutter run 终端里会有这个东西: 按照上图所示,我们的进入这个网页看看是个啥: 好高大上 ...

  9. Android Material Design简单使用 http://www.cnblogs.com/android-blogs/p/5632103.html

    Android Material Design简单使用 吐槽 作为一个 Android developer,没有什么比拿着 UI 设计的一堆 iOS 风格的设计 来做需求更恶心的了,基本所有空间都要照 ...

最新文章

  1. oracle 之 EXP、IMP 使用简介
  2. iOS 登录功能的实现
  3. Java地位不保?C卷土重来?三大榜单数据为你解读2020上半年语言大趋势
  4. Android的虚拟机Dalvik 介绍
  5. 视觉SLAM笔记(14) Eigen几何模块
  6. 安装 RabbitMQ
  7. 自动生成的sitemap.html乱码,任意网站添加生成sitemap地图
  8. [设计模式-行为型]解释器模式(Interpreter)
  9. java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
  10. Java编写的日历,输入年月,输出这个月的日期与星期
  11. vs2005打点不提示
  12. Go程序设计语言pdf
  13. Python爬虫 - 01.实现贴吧一键签到
  14. php模板页文件在,thinkphp 使每一个模板页都包括一个header文件和一个footer文件
  15. 迷之Konigsberg七桥问题
  16. C语言求1到100的和
  17. 2022年9月份前端女生工作总结
  18. java 银行存取款_使用JAVA编写一个简单的银行存取款程序
  19. python3 规则引擎_Ilog、Drools、Jess规则引擎的Rule Language 对比
  20. C/C++ 延时函数 (标准库)

热门文章

  1. python读二进制文件博客园_python二进制读写文件
  2. ubuntu执行python脚本_在启动时运行python脚本作为守护进程(Ubuntu)
  3. php上传压缩文件,8行代码实现PHP上传RAR文件并解压
  4. python中继承和组合的区别_Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类...
  5. 成功 打不开_switch商店打不开怎么办?手把手教你用这五种方法成功进入eshop
  6. mysql into outfile语法_select into outfile
  7. 对称二叉树c++_二叉树:我对称么?
  8. shellcode执行盒_简单shellcode学习
  9. java adt is保存快捷键_实用的eclipse adt 快捷键
  10. mysql 单标递归_MYSQL递归树查询的实现