中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Android中使用Toast自定義顯示時間

發布時間:2021-06-09 17:24:25 來源:億速云 閱讀:655 作者:Leah 欄目:移動開發

這篇文章將為大家詳細講解有關如何在Android中使用Toast自定義顯示時間,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

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

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

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

通過分析Toast的顯示原理和彈窗控制邏輯,本人借助Handler和Runnable機制,也成功實現了對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();

關于如何在Android中使用Toast自定義顯示時間就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰溪市| 轮台县| 出国| 桐乡市| 同德县| 高要市| 确山县| 通河县| 盈江县| 恩平市| 磐安县| 新丰县| 香格里拉县| 木兰县| 磐石市| 通海县| 麻阳| 长春市| 阿拉善左旗| 香格里拉县| 青浦区| 奉化市| 平遥县| 手游| 子长县| 罗甸县| 南雄市| 璧山县| 太康县| 将乐县| 巴林左旗| 文化| 饶平县| 苏尼特右旗| 河北区| 凤庆县| 柏乡县| 上杭县| 谢通门县| 普兰店市| 桂林市|