XBaseAndroid框架使用大致教程

fanhua1994發表於2018-02-02

XBaseAndroid

一款整合了網路請求,本地快取,配置檔案,資料庫對映,許可權申請,連結串列管理Activity,簡化Activity、Service、Broadcast啟動, 萬能ListView,GridView介面卡、高仿IOS彈窗、倒數計時/延遲執行,標題欄元件,圖片顯示,webview引擎,APP更新元件,APP崩潰日誌元件,事件匯流排(熱更新元件暫未加入,有需要請聯絡)。

專案地址:github.com/fanhua1994/…(給顆星星咯)

BaseAndroid

版本更新

目前最新版本是1.0.3 更新日誌

聯絡作者

簡書:www.jianshu.com/u/50c9e5f00…

CSDN:blog.csdn.net/dong_183832…

程式碼提交

需要提交程式碼的朋友請郵箱聯絡並附上程式碼即可:90fanhua@gmail.com

引入方式

在專案root gradle加入

allprojects {
    repositories {
        google()
        jcenter()
	//加入以下倉庫
        maven { url 'https://jitpack.io' }
    }
}
複製程式碼

app下的gradle加入

dependencies {
	compile 'com.github.fanhua1994:XBaseAndroid:1.0.3'
}
複製程式碼

初始化框架

1.初始化Application

<application
android:name="com.hengyi.baseandroidcore.base.XBaseApplication"
...
...
/>
複製程式碼

2.繼承XBaseActivity實現ButterKnife檢視自動注入功能,不使用可不繼承,直接使用XBaseActivity

由於ButterKnife不能再lib中bind。所以必須繼承XBaseActivity進行二次封裝。XBaseAndroid不提供檢視註解,如需使用請自行引入以下庫。

compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
複製程式碼
package com.hengyi.baseandroiddemo;

import android.os.Bundle;

import com.hengyi.baseandroidcore.base.XBaseActivity;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * Created by Administrator on 2017/10/10.
 */

public abstract class BaseActivity extends XBaseActivity {
    private Unbinder unbind = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        unbind = ButterKnife.bind(this);
    }

    @Override
    public int setBaseContentView() {
        return setContentView();
    }

    public abstract int setContentView();

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbind.unbind();
    }
}

複製程式碼

功能介紹

彈窗

XBaseAndroid框架使用大致教程

CustomAlertDialog dialog = new CustomAlertDialog(this).builder();
dialog.setTitle("溫馨提示");
dialog.setMsg("你好啊");
dialog.show();
複製程式碼

可以選擇的彈窗

XBaseAndroid框架使用大致教程

CustomAlertDialog dialog = new CustomAlertDialog(this).builder();
dialog.setTitle("溫馨提示");
dialog.setMsg("你好啊");
dialog.setNegativeButton("確定", new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		toast("點選了確定");
	}
});

dialog.setPositiveButton("取消",null);
dialog.show();
複製程式碼

彈出輸入框

XBaseAndroid框架使用大致教程

CustomConfirmDialog dialog = new CustomConfirmDialog(this).builder();
dialog.setTitle("溫馨提示");
dialog.setInputNumber(false);
dialog.setNegativeButton("取消", new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    }
});

dialog.setPositiveButton("取消",new CustomConfirmDialog.OnPostListener(){

    @Override
    public void OnPost(String value) {
	toast(value);
    }
});
dialog.show();
複製程式碼

載入Loading

XBaseAndroid框架使用大致教程

showLoadingDialog("正在載入");
closeLoadingDialog();
複製程式碼

倒數計時控制元件

countdownUtils = CountdownUtils.getInstance();
countdownUtils.start(100000,1000);
countdownUtils.setCountdownListener(new CountdownUtils.setOnCountDownListener() {
    @Override
    public void onTick(int second) {
	numberProgressBar.setProgress(100 - second);
    }

    @Override
    public void onFinish() {

    }
});
複製程式碼

定時器控制元件

TimerUtils timer = TimerUtils.getInstance();
timer.setTimer_id(123);
timer.startTimer(5);//單位秒
timer.setTimerListener(new TimerUtils.TimerTaskCallbackListener() {
    @Override
    public void Timing(int timer_id, int timer_count) {
	toast("timer_id:"+timer_id);
    }
});
複製程式碼

許可權申請

AndroidManifest.xml

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
複製程式碼
PermissionUtils.requestPermissions(this,200,new String[]{"android.permission.READ_CONTACTS"},new PermissionUtils.OnPermissionListener(){

    @Override
    public void onPermissionGranted() {
        toast("許可權申請成功");
    }

    @Override
    public void onPermissionDenied(String[] deniedPermissions) {
        toast("許可權申請失敗");
    }
});
複製程式碼

建立工作組

工作組就好比我們將我們的外部儲存分為很多很多目錄,每個目錄一個分組。檔案互不影響。可以刪除寫入資料。目前預設的有db、cache、file分組。其他需要自定義。

boolean isok = ProjectUtils.getInstance().setIdCard(true).setFileType(FileUtil.CACHE_FILE).createWorkGroup("mycache12");
toast("執行結果:" + isok);

//setIdCard setFileType可以不呼叫。預設是自定義分組模式,外部儲存有優先。
複製程式碼

本地快取使用

DiskLruCacheHelper cache = DiskLruCacheHelper.getInstance(this);
cache.put("cache","21424984034324934320434940494044904239");
toast(cache.getAsString("cache") +"快取大小:"+cache.getCacheCount());
複製程式碼

配置檔案使用

ConfigUtil自主維護了一個雜湊表可以很快的根據資料快取拿到資料,不用去xml裡面讀取,效能很不錯。

ConfigUtils config = ConfigUtils.getInstance(this);
config.addOrUpdateText("name","繁華");
toast(config.findStringByKey("name"));
config.clearConfig();
複製程式碼

標題欄使用

<com.hengyi.baseandroidcore.weight.EaseTitleBar
 xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
app:titleBarTitle="標題欄演示"
app:titleBarLeftImage="@drawable/icon_back"
android:layout_height="50dp">
</com.hengyi.baseandroidcore.weight.EaseTitleBar>

複製程式碼
@BindView(R.id.titleBar)EaseTitleBar easeTitleBar;
easeTitleBar.setLeftLayoutClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view) {
	ActivityStack.getInstance().popActivity();
    }
});
複製程式碼

如何高效關閉Activity

ActivityStack.getInstance().popActivity();
千萬不要使用finish();
複製程式碼

呼叫web引擎

WebEngineActivity.java需要在Mainfast.xml註冊activity。最新修復web引擎支援隱藏標題欄。

 StartActivity(WebEngineActivity.class,new String[]{WebEngineActivity.WEB_URL_PARAM,WebEngineActivity.WEB_SHOW_TITLE_BAR},"http://www.baidu.com/",false);
複製程式碼

本地資料庫使用

建立實體Student

package com.hengyi.db;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

/**
 * Created by Administrator on 2017/10/8.
 */

@DatabaseTable
public class Student {

    @DatabaseField
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @DatabaseField
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
複製程式碼

建立StudentDao

package com.hengyi.db;

import android.content.Context;

import com.hengyi.baseandroidcore.database.BaseDao;
import com.hengyi.baseandroidcore.database.BaseDaoImpl;

import java.sql.SQLException;

/**
 * Created by Administrator on 2017/10/11.
 */

public class StudentDao {
    private BaseDao<Student,Integer> studentDao;

    public StudentDao(Context context){
        studentDao = new BaseDaoImpl<>(context,Student.class);
    }

    public int add(Student s){
        try {
            return studentDao.save(s);
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }
    }
}
複製程式碼

初始化資料庫(切記在啟動介面做好初始化,或者Application檔案做好相關初始化操作)

DatabaseHelper.setDatabase("easy",2);//設定資料庫版本及名稱
DatabaseHelper.addTable(Student.class);
複製程式碼

使用

StudentDao sd = new StudentDao(context);
Student s = new Student();
s.setId(1);
s.setName("ggeegegerger");
int res = sd.add(s);
toast("新增學生結果是:" + res);
複製程式碼

資料庫版本變化監聽

DatabaseHelper.getInstance(this).setDatabaseVersionChangeListener(new DatabaseVersionChangeListener() {
    @Override
    public void onChange(int oldVersion, int newVersion) {
	toast("資料庫版本繁盛變化:老版本:"+oldVersion +" 新版本:"+newVersion);
	if(newVersion == 2){
	    try {
		DatabaseHelper.getInstance(getContext()).getDao(Student.class).executeRaw("ALTER TABLE 'student' ADD COLUMN sex int");
		toast("資料更新成功");
	    } catch (SQLException e) {
		e.printStackTrace();
		toast("資料更新失敗");
	    }
	}
    }
});

toast("當前資料庫版本:"+DatabaseHelper.getInstance(this).getVersion() +"資料庫名:"+DatabaseHelper.getInstance(this).getDatabaseName());
複製程式碼

提供狀態列工具

StatusBarCompat.setStatusBarColor(Activity activity, int color)
StatusBarCompat.setStatusBarColor(Activity activity, int statusColor, int alpha)
StatusBarCompat.translucentStatusBar(activity);
//需要隱藏狀態列背景需要SDK版本大於21
StatusBarCompat.translucentStatusBar(Activity activity, boolean hideStatusBarBackground);
setStatusBarColorForCollapsingToolbar(Activity activity, AppBarLayout appBarLayout, CollapsingToolbarLayout collapsingToolbarLayout,Toolbar toolbar, int statusColor)
複製程式碼

網路請求

本框架網路請求使用的是OkGo框架,文件地址如下網路請求文件猛戳檢視

殺死當前APP程式

ActivityStack.getInstance().clearAllActivity();
kill();
複製程式碼

表單校驗

表單校驗作為重要的模組,我獨立出來了,需要使用的請看詳解介紹咯。 參考文件

如果您只需要接入校驗模組,請參考這個地址:github.com/fanhua1994/…

APP更新元件(AppUpdateManager)

XBaseAndroid框架使用大致教程

  • 支援MD5檔案校驗
  • 支援強制更新(isForce)
  • 支援在獲取root情況下靜默安裝
  • 支援下載完跳轉到安裝介面
  • 支援安卓7.0
  • 支援各類回撥介面

如何相容Android7.0

AndroidMainfest.xml

application節點下新增

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.hengyi.XBaseandroid.fileProvider"//這個請替換為你的軟體包名
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"/>
</provider>
複製程式碼

將demo res-> xml資料夾複製到你的應用目錄。

UpdateBean updateBean = new UpdateBean();
updateBean.setDescription("今日更新了XBaseAndroid框架的更新管理器。");
updateBean.setDownload_url("http://file.cleveriip.com:88/group2/M00/00/03/rBJbXVnlcPCATMAtAtnNwW8wwRs625.apk");
updateBean.setForce(true);//是否強制更新 或 靜默安裝
updateBean.setAuthority("com.hengyi.XBaseandroid.fileProvider");//相容安卓7.0 安裝  
updateBean.setMd5_code("a034366c2257281060a3ee27df38a793");
updateBean.setNew_version("1.0.0.1");

updateBean.setTitle("新版本來啦,立即更新吧");
AppUpdateManager appUpdateManager = AppUpdateManager.getInstance();
appUpdateManager.checkUpdate(updateBean,this);
appUpdateManager.setAppUpdateListener(new AppUpdateManager.AppUpdateListener() {


    @Override
    public void downloadProgressBar(String progress, String speed) {
	Log.d("AppUpdateManager","進度條:" + progress +"   下載速度:"  + speed);
    }

    @Override
    public void downloadSuccess(File app_path) {
	Log.d("AppUpdateManager","下載成功    路徑如下:" + app_path.getAbsolutePath());
    }

    @Override
    public void downloadStart() {
	Log.d("AppUpdateManager","下載開始");
    }

    @Override
    public void downloadError(String message) {
	Log.d("AppUpdateManager","下載錯誤");
    }

    @Override
    public void downloadFinish() {
	Log.d("AppUpdateManager","下載結束");
    }

    @Override
    public void cancelDownload() {
	Log.d("AppUpdateManager","取消下載");
    }

    @Override
    public void NoUpdate() {
	Log.d("AppUpdateManager","沒有更新");
    }
});
複製程式碼

下載日誌

:48:39.332 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:78.49   下載速度:789.25kb/s
11-12 05:48:39.645 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:79.43   下載速度:889.85kb/s
11-12 05:48:39.945 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:80.80   下載速度:1.03mb/s
11-12 05:48:40.250 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:82.20   下載速度:1.18mb/s
11-12 05:48:40.548 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:83.84   下載速度:1.37mb/s
11-12 05:48:41.186 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:85.09   下載速度:1.40mb/s
11-12 05:48:41.488 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:85.91   下載速度:1.45mb/s
11-12 05:48:41.791 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:86.79   下載速度:1.49mb/s
11-12 05:48:42.089 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:88.55   下載速度:1.66mb/s
11-12 05:48:42.440 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:89.74   下載速度:1.70mb/s
11-12 05:48:42.740 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:90.63   下載速度:1.71mb/s
11-12 05:48:43.046 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:91.54   下載速度:1.71mb/s
11-12 05:48:43.358 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:92.31   下載速度:1.61mb/s
11-12 05:48:43.663 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:93.06   下載速度:1.51mb/s
11-12 05:48:43.974 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:93.96   下載速度:1.40mb/s
11-12 05:48:44.309 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:94.55   下載速度:1.39mb/s
11-12 05:48:44.641 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:95.88   下載速度:1.44mb/s
11-12 05:48:45.027 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:96.70   下載速度:1.41mb/s
11-12 05:48:45.336 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:97.53   下載速度:1.27mb/s
11-12 05:48:45.638 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:98.34   下載速度:1.23mb/s
11-12 05:48:45.937 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:99.18   下載速度:1.23mb/s
11-12 05:48:46.243 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:99.93   下載速度:1.20mb/s
11-12 05:48:46.250 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 進度條:100.00   下載速度:1.35mb/s
11-12 05:48:46.253 9028-9028/com.hengyi.baseandroiddemo D/AppUpdateManager: 下載成功    路徑如下:/storage/emulated/0/Android/data/com.hengyi.baseandroiddemo/download/XBaseAndroid_軟體更新_1.0.0.1.apk
複製程式碼

圖片壓縮

效果與對比

內容 原圖 Luban Wechat
截圖 720P 720*1280,390k 720*1280,87k 720*1280,56k
截圖 1080P 1080*1920,2.21M 1080*1920,104k 1080*1920,112k
拍照 13M(4:3) 3096*4128,3.12M 1548*2064,141k 1548*2064,147k
拍照 9.6M(16:9) 4128*2322,4.64M 1032*581,97k 1032*581,74k
滾動截圖 1080*6433,1.56M 1080*6433,351k 1080*6433,482k

使用

非同步呼叫

Luban內部採用IO執行緒進行圖片壓縮,外部呼叫只需設定好結果監聽即可:

Luban.with(this)
        .load(photos)                                   // 傳人要壓縮的圖片列表
        .ignoreBy(100)                                  // 忽略不壓縮圖片的大小
        .setTargetDir(getPath())                        // 設定壓縮後檔案儲存位置
        .setCompressListener(new OnCompressListener() { //設定回撥
          @Override
          public void onStart() {
            // TODO 壓縮開始前呼叫,可以在方法內啟動 loading UI
          }

          @Override
          public void onSuccess(File file) {
            // TODO 壓縮成功後呼叫,返回壓縮後的圖片檔案
          }

          @Override
          public void onError(Throwable e) {
            // TODO 當壓縮過程出現問題時呼叫
          }
        }).launch();    //啟動壓縮
複製程式碼

同步呼叫

同步方法請儘量避免在主執行緒呼叫以免阻塞主執行緒,下面以rxJava呼叫為例

Flowable.just(photos)
    .observeOn(Schedulers.io())
    .map(new Function<List<String>, List<File>>() {
      @Override public List<File> apply(@NonNull List<String> list) throws Exception {
        // 同步方法直接返回壓縮後的檔案
        return Luban.with(MainActivity.this).load(list).get();
      }
    })
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe();
複製程式碼

通知欄工具類

NotifacationUtils notifacation = new NotifacationUtils(this);//例項化通知欄
notifacation.createProgressNotify(R.drawable.ic_launcher,200,"正在下載中","APP更新","App正在準備下載",new Intent());//建立進度條通知欄
notifacation.showProgressNotify(progress2,"當前下載網速" + speed);//設定進度條及文字顯示

//notifacation.createNotify();//建立普通通知欄
複製程式碼

事件匯流排

//使用時,註冊就行了 
onCreate(){
	EventBus.getDefault().register(this);
}

//介面銷燬時 反註冊
onDestroy(){
	EventBus.getDefault().unregister(this);
}
複製程式碼
@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(DefaultMessageEvent event) {/* Do something */};
複製程式碼

如何傳送訊息?

EventManager.sendDefaultMessage(DefaultMessageEvent defaultMessageEvent);
複製程式碼

DefaultMessageEvent是預設的訊息類,您可以自定義訊息。但預設的支援擴充套件資料,完全足夠使用。DefaultMessageEvent支援以下的資料格式。

private Object obj;//傳輸物件
private int code;//傳輸數字
private int status;
private int mint;
private int type;
private float mfloat;//傳輸單精度數字
private double mdouble;//傳輸雙精度數字
private long mlong;//傳輸長整型
private String content;//傳輸字串
private Map<String,Object> map;//擴充套件包
複製程式碼

數字進度條

XBaseAndroid框架使用大致教程

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <com.hengyi.baseandroidcore.weight.NumberProgressBar
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/numberbar"
        android:layout_width="wrap_content"
        android:padding="20dp"
        app:progress_current="0"
        style="@style/NumberProgressBar_Default"
        android:layout_height="wrap_content" />

</LinearLayout>

複製程式碼

模擬進度條 採用倒數計時控制元件

CountDownUtils countDownUtils = new CountDownUtils(100000,1000);
countDownUtils.start(new CountDownUtils.setOnCountDownListener() {
    @Override
    public void onTick(int second) {
	numberProgressBar.setProgress(100 - second);
    }

    @Override
    public void onFinish() {

    }
});
複製程式碼

複製黏貼(不再相容API 11)

ClipboardUtils.getInstance().copy(Context context,String text);//複製
ClipboardUtils.getInstance().paste(Context context)//黏貼
ClipboardUtils.getInstance().setListener(Context context,ClipboardManager.OnPrimaryClipChangedListener m_listener);
複製程式碼

網路監測

boolean status = NetworkUtils.isNetworkConnected(Context context);
複製程式碼

JSON字串轉物件

原始碼如下:

public static <T> T parseJsonWithGson(String jsonData, Class<T> type) {
	if(gson == null)
	    gson = new Gson();
	T result = gson.fromJson(jsonData, type);
	return result;
}
複製程式碼

使用如下:

User users = GsonUtils.parseJsonWithGson("{\"id\":1,\"name\":\"董志平\"}",User.class);
複製程式碼

ListView、GridView萬能介面卡

我們編寫一個Adapter

package com.zhiweism.youerplatformparent.adapter;

import android.content.Context;
import android.view.View;

import com.hyphenate.chat.EMClient;
import com.hyphenate.exceptions.HyphenateException;
import com.zhiweism.youerplatformparent.R;
import com.zhiweism.youerplatformparent.table.FriendApply;
import com.zhiweism.youerplatformparent.table.FriendApplyDao;
import com.zhiweism.youerplatformparent.utils.GeneralUtils;

import java.util.List;

/**
 * Created by Administrator on 2017/12/4.
 */
public class FriendApplyAdapter extends CommonAdapter<FriendApply> {
    private Context context;

    public FriendApplyAdapter(Context context, List<FriendApply> data, int layout_id) {
        super(context, data, layout_id);
        this.context = context;
    }

    @Override
    public void ViewHolder(CommonViewHolder holder, int position) {
        final FriendApply friendApply = getItem(position);
        holder.setText(R.id.tv_username,friendApply.getUsername(),null);
        holder.setText(R.id.tv_message,friendApply.getMessage(),null);

        holder.setViewListener(R.id.refuse,new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                try {
                    EMClient.getInstance().contactManager().declineInvitation(friendApply.getUsername());
                    data.remove(friendApply);
                    FriendApplyDao.getInstance().remove(friendApply);
                    notifyDataSetChanged();
                } catch (HyphenateException e) {
                    e.printStackTrace();
                }
            }
        });

        holder.setViewListener(R.id.pass,new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                try {
                    EMClient.getInstance().contactManager().acceptInvitation(friendApply.getUsername());
                    data.remove(friendApply);
                    FriendApplyDao.getInstance().remove(friendApply);
                    notifyDataSetChanged();
                } catch (HyphenateException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

複製程式碼

相關方法詳解,CommonViewHolder。

可想而知,支援事件回撥

void setText(int layout_id,String text,View.OnClickListener listener);
複製程式碼

設定圖片

void setImage(int layout_id,String image_url,View.OnClickListener listener)
複製程式碼

設定原圖

 void setCircleImage(int layout_id,String image_url,View.OnClickListener listener)
複製程式碼

獲取一個控制元件檢視

View getView(int layout_id)
複製程式碼

獲取任意控制元件,泛型返回

<T> T getView(int layout_id,Class<T> type)
複製程式碼

控制元件設定監聽單擊事件

void setViewListener(int layout_id,View.OnClickListener listener)
複製程式碼

執行耗時任務,執行緒池使用

我這裡只講如何的使用執行緒池,詳細請到demo中檢視。下面建立100個執行緒。但是同時只會建立4個新的物件。當執行緒池空時,去佇列拿執行緒,直到建立的執行緒數量 + 1 = maxPoolSize就會停止建立。

//建立執行緒池  實際中執行的執行緒是比maxPoolSize少一個的。
HandlerExecutorPool handlerExecutorPool = HandlerExecutorPool.getInstance(5,200);
for(int i = 0;i < 100;i++){
    LoginThread loginThread = new LoginThread();
    Thread thread = new Thread(loginThread);
    handlerExecutorPool.execute(thread);
}
複製程式碼

//關閉執行緒池

handlerExecutorPool.stutdown();
複製程式碼

如何設定APP主題色

修改colors.xml

<color name="main_color">#20a7e6</color>
複製程式碼

如何讓狀態列顏色與主題色相同(沉浸式標題欄)

StatusBarCompat.setStatusBarColor(this, Color.parseColor(ColorUtils.changeColor(this,R.color.main_color)));
複製程式碼

萬能介面卡使用方法

package com.hengyi.adapter;

import android.bluetooth.BluetoothDevice;
import android.content.Context;

import com.hengyi.baseandroidcore.adapter.CommonAdapter;
import com.hengyi.baseandroidcore.adapter.CommonViewHolder;
import com.hengyi.baseandroiddemo.R;

import java.util.List;

/**
 * Created by Administrator on 2017/11/22.
 */

public class BluetoothsAdapter extends CommonAdapter<BluetoothDevice> {

    public BluetoothsAdapter(Context context, List<BluetoothDevice> data, int layout_id) {
        super(context, data, layout_id);
    }

    private String getStatus(int status){
        if(status == BluetoothDevice.BOND_BONDED){
            return "已配對";
        }else if(status == BluetoothDevice.BOND_BONDING){
            return "配對中";
        }else{
            return "未配對";
        }
    }

    @Override
    public void ViewHolder(CommonViewHolder holder, int position) {
        BluetoothDevice bluetoothDevice = getItem(position);
        holder.setText(R.id.name,bluetoothDevice.getName(),null);
        holder.setText(R.id.address,bluetoothDevice.getAddress(),null);
        holder.setText(R.id.status,getStatus(bluetoothDevice.getBondState()),null);
    }
}
複製程式碼

XBaseAndroid框架使用大致教程

相關文章