Android初学者必须知道的10个技术

本篇内容给大家整理10个作为Android初学者必须要了解和会用的技术以及详细代码分析,需要的朋友收藏下慢慢学习吧。

如果你是往Android开发路上走,那么以下的10个技术功能实现是你必须要会的,来看看。

技术选型

1. 下拉刷新 + 加载更多

采用BGARefreshLayout-Android,支持的下拉刷新样式基本可以满足我的需求,使用起来也比较简单,实现两个接口即可设置刷新动作和加载更多的动作。这位卓友的其他开源库也很好用,有兴趣的可以去看下。

使用方法:

 private void initBGALayout() { // 为BGARefreshLayout 设置代理 bgaRefreshLayout.setDelegate(this); // 设置下拉刷新和上拉加载更多的风格   参数1:应用程序上下文,参数2:是否具有上拉加载更多功能 BGANormalRefreshViewHolder refreshViewHolder = new BGANormalRefreshViewHolder(getContext(), true); refreshViewHolder.setLoadingMoreText("加载更多"); refreshViewHolder.setLoadMoreBackgroundColorRes(R.color.white); refreshViewHolder.setRefreshViewBackgroundColorRes(R.color.white); bgaRefreshLayout.setRefreshViewHolder(refreshViewHolder); }
 @Override public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) { //执行下拉刷新操作 } @Override public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) { //执行加载更多操作,返回false代表不支持加载更多 return false; }

2. 网络请求

使用方法:

 public interface JuheApi { @GET Observable getNews(@Url String url); @GET Observable getFunny(@Url String url); @GET Observable getJoke(@Url String url); @GET Observable getTodayInHistory(@Url String url); @GET Observable getQueryNews(@Url String url); }
 public class Retrofitance { public static final String BASE_URL = "http://gank.io/api/"; private static final int DEFAULT_TIMEOUT = 5; private Retrofit retrofit; private JuheApi mJuheApi; private OkHttpClient mOkHttpClient; //构造方法私有 private Retrofitance() { //手动创建一个OkHttpClient并设置超时时间 OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); mOkHttpClient = httpClientBuilder.build(); retrofit = new Retrofit.Builder().client(mOkHttpClient) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(BASE_URL) .build(); mJuheApi = retrofit.create(JuheApi.class); } //获取单例 public static Retrofitance getInstance() { return SingletonHolder.INSTANCE; } /** * 根据类型获取新闻信息 */ public void getNews(Observer subscriber, String type) { String URL = ""; commonOp(mJuheApi.getNews(URL),subscriber); } /** * 获取趣图信息 */ public void getFunny(Observer subscriber, int pagenum) { String URL =""; commonOp(mJuheApi.getFunny(URL), subscriber); } /** * 获取历史上的今天 */ public void getHistory(Observer subscriber) { Calendar now = Calendar.getInstance(); String URL = ""; commonOp(mJuheApi.getTodayInHistory(URL),subscriber); } /** * 获取笑话大全 */ public void getJoke(Observer subscriber, int pagenum) { String URL =""; commonOp(mJuheApi.getJoke(URL), subscriber); } public void getQueryNews(Observer subscriber, String keyword) { String URL = ""; commonOp(mJuheApi.getQueryNews(URL), subscriber); } private void commonOp(Observable observable, Observer subscriber) { observable.subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } //在访问HttpMethods时创建单例 private static class SingletonHolder { private static final Retrofitance INSTANCE = new Retrofitance(); } }

3. 响应式编程

不二选择,RxJava2 + RxAndoid,告别Thread和AsyncTask,不用写Handler了。

使用方法:

 public void getContent(int pagenum) { Observer observer = new Observer() { @Override public void onComplete() { endLoading(); } @Override public void onError(Throwable e) { e.printStackTrace(); endLoading(); onNetworkError(); } @Override public void onSubscribe(Disposable d) { } @Override public void onNext(FunnyBean funnyBean) { if (bgaRefreshLayout.isLoadingMore()) { } else { mVisitableList.clear(); } if (funnyBean.getResult() == null || funnyBean.getResult().getData() == null || funnyBean.getResult().getData().size() == 0) { onDataEmpty(); } else { mVisitableList.addAll(funnyBean.getResult().getData()); } mMultiRecyclerAdapter.setData(mVisitableList); } }; Retrofitance.getInstance().getFunny(observer, pagenum); }

4. 多类型RecyclerView Item实现

当然你也可以选择一些开源库,只是我习惯了使用这种方式,用起来也比较顺手。思路和实现方式也比较简单,使用接口化的数据和泛型,抽取抽象类,结构分明,扩展性强,聪明的你应该一看就会懂。

具体使用方法参考项目代码或者是上面这篇博文,涉及的代码比较多,主要是稍微有点结构化,不便列举。

5. 注解

butterknife,告别findViewById,但是有了Kotlin,我觉得我们也可以告别butterknife了,毕竟一把小刀。
使用方法:

 @BindView(R.id.tl_web) Toolbar tlWeb; @BindView(R.id.wv_content) WebView wvContent; @BindView(R.id.activity_web) LinearLayout activityWeb; @BindView(R.id.progressbar) ProgressBar progressbar; .... ButterKnife.bind(this);

配合插件使用效果会更好喔。

6. 图片加载

我首选Glide,因为我有GIF的需求,Picasso不支持GIF,虽然体量比较小。

Glide的使用方法参考官文,最近Glide有大版本升级,改动比较多,有兴趣的可以关注下

使用方法:

 Glide.with(itemView.getContext()).load(pic1path).placeholder(R.mipmap.empty_data).into(imageView);

Glide有更高阶的使用方法,根据需求学习吧。

7. 数据解析

Gson,Google的开源库,基本可以满足我的开发需求,暂时没有尝试过其他的。

使用的过程中配合Retrofit使用

 compile 'com.squareup.retrofit2:converter-gson:2.1.0' retrofit = new Retrofit.Builder().client(mOkHttpClient) /*This is the key*/ .addConverterFactory(GsonConverterFactory.create())     .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(BASE_URL) .build();

配合插件使用效果会更好:GsonFormat

8. 界面布局

采用TabHost + Framgnet可以满足日常需求,当然使用开源库FlycoTabLayout更是可以构建出炫酷的Tab页面,配合上Fragment,基本可以满足需求。

使用方法:

 switch (i) { case 0: textView.setText("资讯"); imageView.setImageResource(R.drawable.news); tabHost.addTab(tabHost.newTabSpec("1").setIndicator(view).setContent( R.id.frag_news)); break; case 1: textView.setText("笑话"); imageView.setImageResource(R.drawable.joke); tabHost.addTab(tabHost.newTabSpec("2").setIndicator(view).setContent( R.id.frag_joke)); break; case 2: textView.setText("趣图"); imageView.setImageResource(R.drawable.funny); tabHost.addTab(tabHost.newTabSpec("3").setIndicator(view).setContent( R.id.frag_funny)); break; case 3: textView.setText("历史"); imageView.setImageResource(R.drawable.history); tabHost.addTab(tabHost.newTabSpec("4").setIndicator(view).setContent( R.id.frag_history)); break; default: break; }

FlycoTabLayout的使用方法参考官文或者网上如海水般的博文。

9. 内容搜索

自定义Toolbar这个时候就显示出来威力。简单的一个文本框和一个若隐若现的搜索按钮,满足需求。开源库也有一些,但是适合我自己的不太多,所以基本上我都是如上实现。

使用方法:

  

10. 版本更新

第三方服务 。我使用的是Fir.im,相对比较好用,利用提供的版本接口检测版本更新。然后本地下载或者跳转到浏览器下载应用,完成安装,都是不错的选择。类似的平台还有很多,可以网上搜索一下。

以上就是Android初学者必须知道的10个技术的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动