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

Android初学者必须知道的10个技术,第1张

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

如果你是往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<NewsBean> getNews(@Url String url);  @GET  Observable<FunnyBean> getFunny(@Url String url);  @GET  Observable<JokeBean> getJoke(@Url String url);  @GET  Observable<HistoryBean> getTodayInHistory(@Url String url);  @GET  Observable<queryNewsBean> 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<NewsBean> subscriber,String type) {    String URL = "";    commonop(mJuheAPI.getNews(URL),subscriber);  }  /**   * 获取趣图信息   */  public voID getFunny(Observer<FunnyBean> subscriber,int pagenum) {    String URL ="";    commonop(mJuheAPI.getFunny(URL),subscriber);  }  /**   * 获取历史上的今天   */  public voID getHistory(Observer<HistoryBean> subscriber) {    Calendar Now = Calendar.getInstance();    String URL = "";    commonop(mJuheAPI.getTodayInHistory(URL),subscriber);  }  /**   * 获取笑话大全   */  public voID getJoke(Observer<JokeBean> subscriber,int pagenum) {    String URL ="";    commonop(mJuheAPI.getJoke(URL),subscriber);  }  public voID getqueryNews(Observer<queryNewsBean> 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<FunnyBean> observer = new Observer<FunnyBean>() {    @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这个时候就显示出来威力。简单的一个文本框和一个若隐若现的搜索按钮,满足需求。开源库也有一些,但是适合我自己的不太多,所以基本上我都是如上实现。

使用方法:

<androID.support.v7.Widget.Toolbar  androID:ID="@+ID/toolbar_search"  androID:layout_wIDth="match_parent"  androID:layout_height="40dp"  androID:fitsSystemwindows="true"  androID:background="@color/colorToolbar">  <linearLayout    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent">    <EditText      androID:ID="@+ID/et_search"      androID:layout_wIDth="0dp"      androID:layout_height="match_parent"      androID:layout_marginBottom="8dp"      androID:layout_margintop="8dp"      androID:layout_weight="6"      androID:background="@drawable/search_edittext_bg"      androID:padding="2dp"      androID:textcolor="@color/colorBlack"      androID:textSize="12sp"/>    <button      androID:ID="@+ID/bt_search"      androID:layout_wIDth="0dp"      androID:layout_height="match_parent"      androID:layout_weight="2"      androID:clickable="false"      androID:gravity="center"      androID:text="搜索"      androID:background="@color/colorToolbar"      androID:textcolor="@color/colorToolbar"      androID:textSize="14sp"/>  </linearLayout></androID.support.v7.Widget.Toolbar>

10. 版本更新

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

总结

以上是内存溢出为你收集整理的Android初学者必须知道的10个技术全部内容,希望文章能够帮你解决Android初学者必须知道的10个技术所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存