国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android初學者必須知道的10個技術

2019-10-22 18:21:44
字體:
來源:轉載
供稿:網友

如果你是往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);

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

Android,初學者,技術

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

Android,初學者,技術

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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平潭县| 枣强县| 封开县| 精河县| 肇源县| 平原县| 烟台市| 洛川县| 彩票| 日土县| 大新县| 宁海县| 张北县| 宁化县| 怀来县| 敦化市| 普安县| 沾益县| 峨边| 南乐县| 莱芜市| 当阳市| 奉节县| 博爱县| 萍乡市| 丹阳市| 芮城县| 盐池县| 甘洛县| 福州市| 龙井市| 石阡县| 宝清县| 潢川县| 斗六市| 和林格尔县| 岐山县| 台山市| 乌拉特前旗| 准格尔旗| 铁岭县|