Retrofit2.1.0 + Glide + ToolBar + RecyclerView (补充)

本文是对上篇文章的进一步深入理解

【上文地址】:Retrofit2.1.0 + Glide + ToolBar + RecyclerView

Retrofit2.1.0 使用补充

Retrofit网络请求有GET、POST、DELETE还有PUT的方式,我只使用了GET方式,所以在这里也就谈谈我的使用吧(小白学习记录,有错指出,共同学习)。

  • 使用Retrofit需要准备如下内容
    • 添加Retrofit依赖
    • 数据实体(bean)
    • Service
  • @Path(url问号之前的参数)
    有这么一个url:http://gank.io/api/data/Android/10/1
    那么Service可以写成如下:
public interface GankService {
    @GET("api/data/{type}/{pageSize}/{page}")
    Call<GankResult> getResult(
        @Path("type") String type,
        @Path("pageSize") int pageSize,
        @Path("page") int page) ;
}
  • @Query(url问号之后的参数)
    聚合数据中笑话大全的url:http://japi.juhe.cn/joke/content/text.from?key=您申请的KEY&page=1&pagesize=10
    那么Service可以写成如下:(可以看出这里结合了@Path和@Query的使用)
public interface GankJokerService {
    @GET("{type}/text.from?")//type可以有joker和img
    Call<GanFunJokerResult> getResult(
        @Path("type") String type,
        @Query("key") String key,
        @Query("page") int page,
        @Query("pagesize") int pagesize) ;
}
  • @QueryMap(url问号之后的参数,可以看作是多个@Query)
    有这样的url:http://v.juhe.cn/toutiao/index?type=top&key=APPKEY
    其中top为参数类型,有多个可选。APPKEY为聚合数据中申请的APPKEY,那么Service可以写成如下:
public interface NewsService {
    @GET("toutiao/index")
    Call<NewsResult> getResult(@QueryMap HashMap<String, Object> map);
}
Glide的其它使用
compile 'com.github.bumptech.glide:glide:3.7.0'
  • 加载Bitmap,加载视频的第一帧
Glide.with(mContent).load(imageUrl).asBitmap().into(holder.imageView) ;
  • 加载Gif
Glide.with(mContent).load(imageUrl).asGif().into(holder.imageView) ;
  • 加载默认图片 placeholder
Glide.with(mContent).load(imageUrl).placeholder(R.mipmap.deflat_photo).into(holder.imageView) ;
ToolBar 沉浸式

沉浸式(管他是不是叫这个名字)是在Android4.4至以后的版本才出现,因此为了兼容低版本,需要设置如下内容。
- 第一步(判断版本号,显示顶部系统的UI样式)

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
    View decorView = getWindow().getDecorView();
    int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    decorView.setSystemUiVisibility(option);
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}else if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT){
    WindowManager.LayoutParams  localLayoutParams = getWindow().getAttributes() ;
    localLayoutParams.flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags ;
}
  • 第二步(将状态栏透明化)
    在value/style.xml中设置
<!--在Android 4.4之前的版本上运行,直接跟随系统主题-->
<style name="TranslucentTheme" parent="AppTheme" />

在value-v19/style.xml中设置

<style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">false</item>
</style>

在value-v21/style.xml中设置

<style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">false</item>
    <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>
  • 第三步(给状态栏着色)
<android.support.v7.widget.Toolbar    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary" //着色
    android:fitsSystemWindows="true"  //让状态栏与Toolbar分开,否则会布局混乱
    toolbar:titleTextColor="#ffffff"
    toolbar:popupTheme="@style/ToolbarPopupTheme" //设置菜单的显示位置
    >
</android.support.v7.widget.Toolbar>
RecyclerView下拉刷新,上拉加载更多,添加头布局
  • RecyclerView是谷歌推荐的替代ListView的控件,但是各有各的好处吧,GitHub上有不少优秀的库可以使用,既然已经有了轮子,我们就不用再去重复造轮子,但是有时间还是需要好好了解轮子是如何造成的。
  • 这里介绍一个优秀的库XRecyclerView
  • 具体使用可以点击库连接查看,再使用这个库进行分页加载的时候数据要拼接在RecyclerView的后面,文档中采用的是模拟的数据。这里我是这么实现的:
private void getDataFromServer() {//获取服务器的数据
    Retrofit retrofit = new Retrofit.Builder().baseUrl("http://v.juhe.cn/")
            .addConverterFactory(GsonConverterFactory.create()).build();
    NewsService service = retrofit.create(NewsService.class);//Retrofit需要的Service
    HashMap<String, Object> map = new HashMap<>();
    map.put("key", key);
    map.put("type", types[index]);
    Call<NewsResult> call = service.getResult(map);//NewsResult为数据实体
    call.enqueue(this);//这里需要实现Callback<NewsResult>
}
@Override
public void onResponse(Call<NewsResult> call, Response<NewsResult> response) {
    mNewsInfos.addAll(response.body().getResult().getData()) ;//这里是重点,将请求服务器返回的结果添加在集合中
    mNewsAdapter.notifyDataSetChanged();//记得刷新数据
}
@Override
public void onFailure(Call<NewsResult> call, Throwable t) {}
ToolBar参考:

GitHub上的开源库—-StatusBarUtil
Android状态栏着色实践
Android开发:最详细的 Toolbar 开发实践总结
Android ToolBar 使用完全解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_龙衣

赏杯快乐水喝喝

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值