欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android Toast自定義顯示時(shí)間

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

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

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

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

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

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

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,測(cè)試代碼如下:

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android popupwindow簡(jiǎn)單使用方法介紹

    Android popupwindow簡(jiǎn)單使用方法介紹

    這篇文章主要為大家詳細(xì)介紹了Android popupwindow簡(jiǎn)單使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android安裝apk文件并適配Android 7.0詳解

    Android安裝apk文件并適配Android 7.0詳解

    這篇文章主要介紹了Android安裝apk文件并適配Android 7.0詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android編程自定義圓角半透明Dialog的方法

    Android編程自定義圓角半透明Dialog的方法

    這篇文章主要介紹了Android編程自定義圓角半透明Dialog的方法,涉及Android控件的布局及相關(guān)屬性設(shè)置技巧,需要的朋友可以參考下
    2017-03-03
  • Android開發(fā)之TableLayout表格布局

    Android開發(fā)之TableLayout表格布局

    這篇文章主要為大家詳細(xì)介紹了Android開發(fā)之TableLayout表格布局,表格布局模型是以行列的形式管理子控件,對(duì)TableLayout表格布局感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android實(shí)現(xiàn)粒子爆炸效果的方法

    Android實(shí)現(xiàn)粒子爆炸效果的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)粒子爆炸效果的方法,實(shí)例分析了Android動(dòng)畫特效的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • Android自定義時(shí)間軸的實(shí)現(xiàn)過程

    Android自定義時(shí)間軸的實(shí)現(xiàn)過程

    這篇文章主要介紹了Android自定義時(shí)間軸的實(shí)現(xiàn)過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • android實(shí)現(xiàn)截圖并動(dòng)畫消失效果的思路詳解

    android實(shí)現(xiàn)截圖并動(dòng)畫消失效果的思路詳解

    這篇文章主要介紹了android實(shí)現(xiàn)截圖并動(dòng)畫消失的思路詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Flutter實(shí)現(xiàn)打印功能的示例詳解

    Flutter實(shí)現(xiàn)打印功能的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過?Flutter?實(shí)現(xiàn)調(diào)用打印機(jī)打印的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 說說Android的UI刷新機(jī)制的實(shí)現(xiàn)

    說說Android的UI刷新機(jī)制的實(shí)現(xiàn)

    這篇文章主要介紹了說說Android的UI刷新機(jī)制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Android中ListView用法實(shí)例分析

    Android中ListView用法實(shí)例分析

    這篇文章主要介紹了Android中ListView用法,結(jié)合實(shí)例形式分析了ListView的功能,使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-02-02

最新評(píng)論