Android App中使用全域性Toast
自定義的FlexibleToast主要功能:
- 支援預設格式,自上向下佈局為ImageView、TextView、TextView,三個控制元件可以自由組合顯示或隱藏
- 支援Top,Center,Bottom的位置顯示,預設Bottom和TOAST_SHORT顯示。
- 可以傳入自定義的layout的View,支援其他自定義的顯示
- 共用一個Toast物件,防止多次Toast重疊以及並顯示時間的累加,該控制元件僅保留最後一次的文字、顯示時間等設定。
- 在app自己自定義的Application中建立的Toast,Activity,Fragment,Adapter中都可以直接呼叫。
- 主執行緒或者子執行緒可以直接呼叫。
- 使用簡單,先建立一個控制toast各種屬性的builder,然後直接呼叫toastShowByBuilder(builder)即可。
配置和使用步驟:
在自定義的單例Application中新增如下程式碼:
public class BaseApp extends Application {
//.....自己的其他程式碼,該BaseApp必是單例的
// 全域性的 handler 物件
private final Handler APPHANDLER = new Handler();
// 全域性的 Toast 物件
private FlexibleToast flexibleToast;
// ........其他操作
// 在初始化資源的地方建立Toast
flexibleToast = new FlexibleToast(this);
public void toastShowByBuilder(final FlexibleToast.Builder builder) {
if (Looper.myLooper() != Looper.getMainLooper()) {
getAppHandler().post(new Runnable() {
@Override
public void run() {
flexibleToast.toastShow(builder);
}
});
} else {
flexibleToast.toastShow(builder);
}
}
//.....others
}
現在就可以在想Toast的地方使用了。使用方法:
buidler中設定想要的樣式,包括顯示什麼元素,位置,時長。
FlexibleToast.Builder builder = new FlexibleToast.Builder(this).setGravity(FlexibleToast.GRAVITY_TOP).setFirstText("first").setSecondText("second=" + System.currentTimeMillis());
BaseApp.getApp().toastShowByBuilder(builder);
如果想利用自己定義的佈局,可以這樣使用:
其中R.layout.layout_toast_with_two_text是自己定義的佈局,此時builder中對ImageView和TextView的設定都是無效的了。
View toastView = LayoutInflater.from(this).inflate(R.layout.layout_toast_with_two_text, null, false);
TextView tvOne = (TextView) toastView.findViewById(R.id.tv_text_one);
TextView tvTwo = (TextView) toastView.findViewById(R.id.tv_text_two);tvOne.setText("customer one");tvTwo.setText("customer two");
FlexibleToast.Builder builder = new FlexibleToast.Builder(this).setCustomerView(toastView);BaseApp.getApp().toastShowByBuilder(builder);關於初始化Toast的Context,原始碼中的doc是這樣寫的:
The context to use. Usually your {@link android.app.Application} or {@link android.app.Activity} object.
Demo中將new Toast放到了自己的Application中,這樣那麼子執行緒使用就能直接show,而子執行緒如果在使用的時候才new Toast,會Crash,要麼就要用handler去post到主執行緒中toast。也就是要保證toast的建立在主執行緒總。ToastDemo中的SensorList頁面中有這兩個例子。
相關文章
- Flutter之使用Overlay建立全域性Toast並靜態呼叫FlutterAST
- Ionic3全域性修改toast樣式AST
- android使用全域性變數Android變數
- 實現基於React的全域性提示元件ToastReact元件AST
- Android中全域性變數與區域性變數的使用總結Android變數
- angular中定義全域性變數及全域性變數的使用Angular變數
- Application全域性應用APP
- Flutter EasyLoading - 讓全域性Toast/Loading更簡單FlutterAST
- flutter好用的輪子推薦六-超好用的全域性toastFlutterAST
- android全域性修改字型Android
- Fish Redux 全域性Store-AppRoute使用指南ReduxAPP
- Android全域性變數的定義與使用Android變數
- Android 5中不同效果的ToastAndroidAST
- Android中自定義Toast文字大小AndroidAST
- 以太坊中的全域性屬性
- Android Toast 預設和自定義使用AndroidAST
- Android Toast小解AndroidAST
- js檔案中如何讀取app.ux中的全域性變數JSAPPUX變數
- duxapp放棄了redux,在duxapp中區域性、全域性狀態的實現方案APPRedux
- 【UniApp】-uni-app-全域性資料和區域性資料APP
- Android中自定義特定顏色的ToastAndroidAST
- uni-app 微信小程式全域性分享APP微信小程式
- uni-app全域性資料傳遞APP
- Android自定義ToastAndroidAST
- Laravel 使用 Elasticsearch 全域性搜尋LaravelElasticsearch
- 在vue專案中 如何定義全域性變數 全域性函式Vue變數函式
- 【萬里征程——Windows App開發】使用Toast通知WindowsAPPAST
- uni-app全域性樣式和區域性樣式APP
- Android Toast 自定義背景、圖片 隨心使用AndroidAST
- android自定義Application全域性變數不能型別轉換的問題AndroidAPP變數型別
- Android 全域性異常捕獲之CrashHandlerAndroid
- SQL Server中的全域性變數SQLServer變數
- node 全域性物件和全域性變數物件變數
- android Toast五種特效AndroidAST特效
- javascript全域性變數的使用注意JavaScript變數
- QT 全域性變數使用方法QT變數
- 短視訊開發app,Android 強制應用全域性橫屏或豎屏APPAndroid
- vue-cli4中全域性引入jqueryVuejQuery