material Design 控件+GsonFormat+okhttp+ glide+recyclerView+handler去除警告 简单实践

前言:最近使用Gsonformat工具感觉非常好用,大大加快了我们开发的速度,而又总结了一下material Design 控件 以及常用的控件 写下此Demo 综合运用下。(内附handler 警告的去除优化! 哈哈 _ 吧能用的都综合下写着玩玩)

向下滑动时:(标题栏显示)
先来个运行效果:


下拉.png

向上滑动 时(标题栏隐藏了):


上滑.png

(由于搞gif图片 软件老是卡在那就换成两张截图了 将就看吧嘿嘿!)

代码实现:

activity的布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.zhangbiao.ui.OtherActivity">
  <android.support.design.widget.AppBarLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
      <android.support.v7.widget.Toolbar
          app:layout_scrollFlags="scroll|enterAlways|snap"
          android:id="@+id/toolbar"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:background="@color/colorPrimaryDark"/>
  </android.support.design.widget.AppBarLayout>
        <android.support.v7.widget.RecyclerView
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </android.support.v7.widget.RecyclerView>

</android.support.design.widget.CoordinatorLayout>

activity代码

package com.example.administrator.zhangbiao.ui;

import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Message;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;

import com.example.administrator.zhangbiao.Adapter.MyAdapter;
import com.example.administrator.zhangbiao.Beans.MyBean;
import com.example.administrator.zhangbiao.R;
import com.example.administrator.zhangbiao.Utils.HttpUtils;
import com.google.gson.Gson;

import java.io.IOException;
import java.lang.ref.WeakReference;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class OtherActivity extends AppCompatActivity {
    class MyHandler extends android.os.Handler {
        // 弱引用的引用
        // 参考 https://www.jianshu.com/p/d65d7030fb3a
        private WeakReference<Activity> mactivity;


        public MyHandler(Activity activity) {
            mactivity = new WeakReference<Activity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            MyBean myBean = (MyBean) msg.obj;
            Activity activity = mactivity.get();
            if (activity != null) {
//switch case 判断msg.what 省略(此处就发一条消息)
                MyAdapter adapter = new MyAdapter(OtherActivity.this,myBean.getResults());
                recyclerView.setAdapter(adapter);
            }
        }
    }
    private Toolbar toolbar;
    private RecyclerView recyclerView;
    private MyHandler myHandler = new MyHandler(this);



    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        //使标题栏延伸到状态栏
        View docerView = getWindow().getDecorView();
        int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
        docerView.setSystemUiVisibility(option);
        getWindow().setStatusBarColor(Color.TRANSPARENT);
        initViews();
        initData();
    }

    private void initViews() {
        toolbar = findViewById(R.id.toolbar);
        recyclerView = findViewById(R.id.recycler_view);
        //支持toobar的操作  (注:清单文件中吧actionbar去掉)
        setSupportActionBar(toolbar);
    }

    private void initData() {
        String Url = "https://gank.io/api/data/福利/10/1";
        //callback 回调运行在子线程中的 不能更新UI的
        HttpUtils.OkHttpAsyncGetRequest(Url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Gson gson = new Gson();
                MyBean myBean = gson.fromJson(response.body().string(), MyBean.class);
                Log.i("1234", "集合大小" + myBean.getResults().size());
                Message msg = Message.obtain();// 获得对象的方式比较好  相对new (自行百度)
                msg.what = 0x11;
                msg.obj = myBean;
                myHandler.sendMessage(msg);
            }
        });

        // 设置布局管理  默认动画
        GridLayoutManager manager = new GridLayoutManager(this,2);
        recyclerView.setLayoutManager(manager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());


    }
}

adapter bean utils(代码不在给出 参看源码)


image.png

总结:这个demo 吧一些materialDesign 控件的使用特效简单的运用了下,还添加了recyclerView的简单使用, handler警告的去除,glide, okhttp的简单使用,其中gsonformat的工具插件安装使用就不在给出了(强烈推荐 大大提升我们的编码速度,即使你不会写bean对象只需把json ctrl+c ctrl+v 直接生成bean六的一笔) 。

感悟: 我们要把我们所学的灵活运用,自己多敲代码,多看源码(可以从简单的研究起,即使你比着源码照抄一遍(千万别粘贴复制源码),长久下来你会发现慢慢的你的阅读源码能力上升了),我们平时也要多看书,书看多了知识就慢慢的串起来了,本文参考了郭神的第一行代码嘿嘿,其实安卓开发艺术探讨这本也不错。

json 数据:(盗用哪位大神的数据我也忘记了哈哈)
https://gank.io/api/data/福利/10/1

源码:https://github.com/sunnnydaydev/zhangbiao

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容