material Design 控件+GsonFormat+ok
2018-08-19 本文已影响439人
dev晴天
前言:最近使用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