记一次9.png的填坑之旅

最近在项目中进行界面调整时遇到了一个9.PNG图引起的Viewpadding值不正常导致UI显示不符合预期结果的问题。这篇文章就来记录我当时遇到的问题的表现形式,以及如何根据问题找到产生问题的原因,及其最后的解决办法。

RxJava学习之基本使用

RxJava现在在Android开发中越来越流行,作为一个Android开发者我也必须紧跟步伐学习学习RxJava,这篇文章就记录了RxJava中我认为比较常用的一些场景。

也给大伙推荐篇比较好的RxJava文章

RxJava基础

大家都知道JDK中提供了观察者模式的实现,它主要两个重要元素:

  • 被观察者 Observable
  • 观察者 Observer

至于Java中观察者模式的使用,大家可以自行Google下。

RxJava中也有两个重要的元素:

  • 被观察者(事件源) Observable
  • 观察者(事件订阅者) Subscriber

因此RxJava的设计看起来也有点类似JDK中的观察者模式,都有被观察者和观察者。
JDK观察者模式中当有操作需要时是由被观察者通知观察者来进行更新操作
RxJava中是由被观察者Observable发出事件给观察者Subscriber接收,然后观察者Subscriber调用noNext()进行处理,直到调用onComplete)()onError()结束

透过Retrofit使用看其源码设计模式

前言

这篇文章我将从Retrofit的基本用法出发,透过其使用步骤,一步步的探究Retrofit的实现原理及其源码的设计模式。这篇文章可能会将Retrofit中用到的设计模式和其实现原理穿插着写,所以各位同学也可以选择性的阅读。而对于Retrofit具体使用还不太清楚的同学可以去看的另一篇文章Retrofit2的使用介绍

Retrofit2文件上传下载及其进度显示

前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示。

文件上传

定义接口
1
2
3
@Multipart
@POST("fileService")
Call<User> uploadFile(@Part MultipartBody.Part file);
构造请求体上传
1
2
3
4
5
File file = new File(filePath);
RequestBody body = RequestBody.create(MediaType.parse("application/otcet-stream"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body);
Call<User> call = getRetrofitService().uploadOneFile(part);
call.enqueue(callback);

Retrofit2使用介绍

前言

对于还不知道Refrofit是什么的同学,我只能说你们太out了,赶紧去Google下,本文是针对Retrofit2.0的使用介绍,当然大家也可以直接去官网上去看使用介绍

添加依赖

要使用Retrofit首先得添加gradle依赖

1
2
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

声明服务接口

依赖添加完成之后,就可以开始撸代码了,首先我们要新建一个Interface,这个接口就是你要请求的接口服务类,就像这个样子

1
2
3
4
5
6
public interface RetrofitService {

@GET("getModelService")
Call<User> getModelService();
...
}

上面这个接口中暂时只声明了一个方法,而在Retrofit中想这样声明的一个方法就代表了一个具体的Http请求接口。Retrofit中方法上添加@GET注解就表示当前方法代表一个Get请求,我们声明的这个请求方法不带任何参数,且返回结果是User对象。
@GET注解括号中的值getModelService就代表http请求地址的具体指向,这个值与下面baseUrl中配置的URL一起组成一个完整的请求地址
Retrofit就是这么任性,它可以帮我们把http的请求结果自动转换成Javabean对象,这将为我们减少不少编码工作。

构造Retrofit对象

接口服务声明完成之后,我们接着需要新建一个Retrofit对象

1
2
3
4
5
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:8080/AndroidService/")
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitService service = retrofit.create(RetrofitService.class);

让RecyclerView更通用

何为通用

用过RecyclerView的都知道它没有为我们提供像ListView中类似addHeaderView,addFooterView,setOnItemClickListener,setOnItemLongClickListener的接口,另外还有底部自动加载更多,这些都是列表使用中很常见的功能,所以如果我们使用RecyclerView来实现列表的话就需要自己实现这些功能。本文主要介绍这些通用功能的实现方式,使得RecyclerView使用起来和ListView一样方便。

RecyclerView子View宽度不充满父容器

今天用RecyclerView写了简单的例子,使用的是LinearLyaoutManager,子View采用的TextView,准备写个简单的List展示,我的RecyclerViewTextView的宽度布局都采用的是match_parent,结果显示出来之后发现子View的宽度压根就没有充满屏幕。之前也用过RecyclerView,但是没有遇到过这个问题,很不解啊~~~网上查阅之后说是在AdapteronCreateViewHolder方法中构造View的时候不能用如下方式:

1
View.inflate(mContext, R.layout.item_layout, null);

必须要换成下面的构造方式把parent带进去:

1
LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false);

而我的Adapter中刚好就使用的是第一种方式,于是立马换成下面的第二种方式实现,运行看效果,果然充满了屏幕~~~这个问题还真是奇葩啊~

RecyclerView下拉刷新上拉加载

背景

作为ListViewGridView的替代者, RecyclerView以它的灵活性著称,而且有着更好更完善的缓存处理机制。但是在使用RecyclerVew的过程中有个很明显的问题:RecyclerView没有为开发者提供addHeadViewaddFooterView两个接口,这就为RecyclerView的下拉刷新和上拉加载实现增加了难度,本文就为大家介绍RecyclerView的下拉刷新和上拉加载的实现方式。

AndroidStudio使用技巧

AndroidStudio使用技巧

本文主要是记录从我使用AndroidStudio以来遇到的一些问题和一些技巧。


  1. 初次使用AndroidStudio,第一次创建Android工程编译时会比较慢,这中间涉及到三个过程:
    1. 可能会去下载最新的SDK,所以在创建工程之前可以先将SDK更新完成
    2. AndroidStudio工程会使用gradle构建,因此会联网下载gradle,这个过程比较慢要耐心等待
    3. 下载工程中的一些依赖包,比如junit
  2. 有时候使用AndroidStudio进行rebuild和clean时,会报错如下:Failed to complete gradle execution cause by...,一般此错误可以通过设置gradle的VM参数解决: -Xmx256m(设置方式为:File > Setting > Gradle > Gradle Vm Option),如果此方法无效,可以选择直接升级AS的版本到最新版本再试,还有其他可能的原因是工程JDK版本与AS设置的JDK版本不同
  3. 设置AndroidStudio的不同主题背景: File > Setting > Appearance&Behavior > Appearance 下的Theme可以选择你要使用的主题

UC浏览器首页滑动动画实现

实现效果


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×