Material Design控件使用(完结篇)

本文整合前面四篇的控件,再结合豆瓣读书的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() {
                            @Override
                            public 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() {
            @Override
            public 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();
                }

            }

            @Override
            public 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>>() {
            @Override
            public void onData(List<Book> books) {
                mAdapter = new MyAdapter(getActivity(), books);
                mRecyclerView.setAdapter(mAdapter);
                mProgressBar.setVisibility(View.GONE);
            }
        });
    }

显示书籍信息

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

侧边菜单栏

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

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

本文作者: 阳春面
原文地址:http://www.aswifter.com/2015/07/02/Material-Design-Example-5/

欢迎关注我的微信公众号,分享Android 开发,IOS开发,Swift开发和互联网内容
微信号:APP开发者

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,417评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,403评论 19 139
  • 为什么你的学习方法可能是错的 1、在学校(大学)你的学习方法:选课单~必修课~选修课~教学大纲和课表~学习记笔记~...
    瞰川阅读 2,578评论 0 0
  • 从备孕小白到备孕大神,我终于迎来了宝宝 2014年10月1日,我跟老公结束了5年的恋爱期,举行了结婚仪式。结婚那天...
    怀孕那些事阅读 2,642评论 0 0
  • 我遇到一个项目,并且对这个项目,产品,之类的,都很好,但是周围人,朋友,都敷衍的说这个可以做,前景也好,一旦说要投...
    加奶咖啡阅读 2,972评论 0 0