最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Toast自定義顯示時間

 更新時間:2018年08月28日 10:14:05   作者:harry_helei  
這篇文章主要為大家詳細介紹了Android Toast自定義顯示時間,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Toast是Android中使用頻率較高的彈窗提示手段,使用起來簡單、方便。常規(guī)使用方法這里不做說明,繼前一篇博客《Android中Toast全屏顯示》 ,其中拋磚引玉的給出一個簡單的實現(xiàn)Toast全屏顯示的方法后,發(fā)現(xiàn)無法控制Toast的顯示時長。雖然Toast中有setDuration(int duration)接口,但是跟蹤代碼發(fā)現(xiàn),設置的時間沒起作用,只有系統(tǒng)默認的兩個時間LENGTH_DURATION = 3500毫秒,SHORT_DURATION = 2000毫秒。也就是說,無論我們設置多長時間,最終影響Toast彈窗時間的只有Toast.LENGTH_LONG和Toast.LENGTH_SHORT兩個參數(shù)。

目前解決該問題的方法主要有兩個:

1、利用反射原理,通過控制Toast的show()和hide()接口來控制顯示時間,可參見博客《利用反射機制控制Toast的顯示時間》。不過該方法只對Android4.0以下的系統(tǒng)有效,通過模擬器實測,也是如此。當前系統(tǒng)基本都在Android4.0以上,該方法過于老舊。

2、利用WindowManager的addView()方法動態(tài)刷屏,可看見博客《Android自定義Toast,可設定顯示時間》 。該方法被很多軟件用來顯示浮動窗口和圖片的動態(tài)懸浮效果,如360手機軟件和一些手游軟件。在Android4.0上是一種不錯的選擇。當然,對于遇到系統(tǒng)默認把懸浮窗口功能關閉的手機,這招可能就不靈了。

通過分析Toast的顯示原理和彈窗控制邏輯,本人借助Handler和Runnable機制,也成功實現(xiàn)了對Toast顯示任意自定義時長。代碼是在Toast全屏顯示的基礎上修改而來,貼出如下:

package com.dls.nltest;
 
import android.content.Context;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.LinearLayout.LayoutParams;
 
public class GenericToast{
 private static final String TAG = "GenericToast";
 
 private static final int TOAST_TEXTSIZE = 20;
 
 /** {@link Toast#LENGTH_SHORT} default time is 3500ms */
 private static final int LENGTH_SHORT_TIME = 2000;
 
 private static Context mContext = null;
 
 private static Toast mToast = null;
 private static TextView mTextView = null;
 private static int mDuration = 0;
 private static CharSequence mText = null;
 
 private Handler mHandler = new Handler();
 
 private GenericToast(Context context) {
 mContext = context;
 }
 
 public static GenericToast makeText(Context context, CharSequence text, int duration){
 GenericToast instance = new GenericToast(context);
 mContext = context;
 mDuration = duration;
 mText = text;
 return instance;
 }
 
 private static void getToast(Context context, CharSequence text){
 mToast = Toast.makeText(context, null, Toast.LENGTH_LONG);
 mToast.setGravity(Gravity.CENTER, 0, 0);
 LinearLayout toastView = (LinearLayout)mToast.getView();
 
 // Get the screen size with unit pixels.
 WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
 DisplayMetrics outMetrics = new DisplayMetrics();
 wm.getDefaultDisplay().getMetrics(outMetrics);
 
 mTextView = new TextView(context);
 LayoutParams vlp = new LayoutParams(outMetrics.widthPixels,
        outMetrics.heightPixels); 
 vlp.setMargins(0, 0, 0, 0);
 mTextView.setLayoutParams(vlp);
 mTextView.setTextSize(TOAST_TEXTSIZE);
 mTextView.setText(text);
 mTextView.setGravity(Gravity.CENTER);
 toastView.addView(mTextView);
 }
 
 /**
 * Before call this method, you should call {@link makeText}.
 *
 * @return Toast display duration.
 */
 public int getDuration(){
 return mDuration;
 }
 
 public void show(){
 Log.d(TAG, "Show custom toast");
 mHandler.post(showRunnable);
 }
 
 public void hide(){
 Log.d(TAG, "Hide custom toast");
 mDuration = 0;
 if(mToast != null){
 mToast.cancel();
 }
 }
 
 private Runnable showRunnable = new Runnable(){
 @Override
 public void run() {
 if(mToast != null){
 mTextView.setText(mText);
 }else{
 getToast(mContext, mText);
 }
 if(mDuration != 0){
 mToast.show();
 }else{
 Log.d(TAG, "Hide custom toast in runnable");
 hide();
 return;
 }
 
 if(mDuration > LENGTH_SHORT_TIME){
 mHandler.postDelayed(showRunnable, LENGTH_SHORT_TIME);
 mDuration -= LENGTH_SHORT_TIME;
 }else{
 mHandler.postDelayed(showRunnable, mDuration);
 mDuration = 0;
 }
 }
 };
}

Toast彈窗10s,測試代碼如下:

GenericToast mGToast = GenericToast.makeText(this, "I am generic toast", 10 * 1000);
mGToast.show();

如果需要終止彈窗,只要在需要的地方調用hide()即可。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android字體相關知識總結

    Android字體相關知識總結

    最近接到一個需求,大致內容是:全局替換當前項目中的默認字體,并引入 UI 設計師提供的一些新字體。于是對字體做了些研究,把自己的一些心得分享給大家。注意:本文所展示的系統(tǒng)源碼都是基于Android-30 ,并提取核心部分進行分析
    2021-06-06
  • Android帶進度條的文件上傳示例(使用AsyncTask異步任務)

    Android帶進度條的文件上傳示例(使用AsyncTask異步任務)

    這篇文章主要介紹了Android帶進度條的文件上傳示例(使用AsyncTask異步任務),使用起來比較方便,將幾個方法實現(xiàn)就行,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • Android仿淘寶預訂日歷(18)

    Android仿淘寶預訂日歷(18)

    這篇文章主要為大家詳細介紹了Android仿淘寶預訂日歷的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Flutter質感設計之模態(tài)底部面板

    Flutter質感設計之模態(tài)底部面板

    這篇文章主要為大家詳細介紹了Flutter質感設計之模態(tài)底部面板,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android自定義進度條效果

    Android自定義進度條效果

    這篇文章主要為大家詳細介紹了Android自定義進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android簡單實現(xiàn)菜單拖拽排序的功能

    Android簡單實現(xiàn)菜單拖拽排序的功能

    這篇文章主要介紹了Android簡單實現(xiàn)菜單拖拽排序的功能,文章圍繞主題展開詳細的內容介紹,具有一定的參考價價值,需要的朋友可以參考一下
    2022-07-07
  • Android實現(xiàn)圖片九宮格

    Android實現(xiàn)圖片九宮格

    這篇文章主要為大家詳細介紹了Android實現(xiàn)圖片九宮格,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android 實現(xiàn)無網(wǎng)絡頁面切換的示例代碼

    Android 實現(xiàn)無網(wǎng)絡頁面切換的示例代碼

    本篇文章主要介紹了Android 實現(xiàn)無網(wǎng)絡頁面切換的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • RecycleView實現(xiàn)各種尺寸圖片展示

    RecycleView實現(xiàn)各種尺寸圖片展示

    這篇文章主要為大家詳細介紹了RecycleView實現(xiàn)各種尺寸圖片展示,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 解析Android中如何做到Service被關閉后又自動啟動的實現(xiàn)方法

    解析Android中如何做到Service被關閉后又自動啟動的實現(xiàn)方法

    本篇文章是對在Android中如何做到Service被關閉后又自動啟動的方法進行了詳細的分析和介紹。需要的朋友參考下
    2013-05-05

最新評論

漳平市| 全椒县| 萝北县| 靖边县| 民权县| 武宣县| 正宁县| 花莲县| 翁牛特旗| 金乡县| 高陵县| 新宾| 克什克腾旗| 新竹市| 阆中市| 安丘市| 讷河市| 马山县| 香港| 启东市| 黎城县| 堆龙德庆县| 永仁县| 东山县| 隆林| 昌宁县| 伊春市| 云梦县| 旬邑县| 绥中县| 湛江市| 台北县| 绍兴县| 疏勒县| 手游| 隆尧县| 太谷县| 资溪县| 静宁县| 通化县| 马公市|