91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

[Android學習筆記六] Toast 更長時間顯示

發布時間:2020-07-19 04:01:49 來源:網絡 閱讀:7216 作者:secondriver 欄目:移動開發


   Android Toast是一種比較特殊的顯示信息的機制,其沒有焦點,并且顯示一段時間之后就自動消失。Android 中提供的顯示時長通過Toast.LENGHT_LONG和Toast.LENGTH_SHORT來指定,底層具體代表的時間長度分別是3.5s和2.0s。


   本文介紹如何使得Toast顯示的時間更長或者指定顯示時間長度。


   1. 基本用法代碼示例

  

 /**
     * Toast默認的長時間顯示 3.5s
     */
    @OnClick(R.id.one_button)
    public void onClickOneButton() {
        Toast.makeText(this, "Hello World", Toast.LENGTH_LONG).show();
    }

    /**
     * Toast默認的短時間顯示 2.0s
     */
    @OnClick(R.id.two_button)
    public void onClickTwoButton() {
        Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();
    }


   2. 通過android.os.CountDownTimer類實現Toast的顯示和消失

      

      通過點擊下圖中的底端左Button使得Toast顯示,右Button使得Toast消失。

      

[Android學習筆記六]  Toast 更長時間顯示[Android學習筆記六]  Toast 更長時間顯示


     代碼示例:

       

/**
     * 使用CountDownTimer實現Toast自定義時間顯示
     */
    @Bind(R.id.three_textView)
    public TextView threeTextView;
    private Toast mCountDownTimeToast;
    public CountDownTimer cdt = new CountDownTimer(60 * 1000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            threeTextView.setText("Time剩余:" + (millisUntilFinished / 1000) + "s");
            if (null != mCountDownTimeToast) {
                mCountDownTimeToast.show();
            }
        }

        @Override
        public void onFinish() {
            threeTextView.setText("顯示完成");
            if (null != mCountDownTimeToast) {
                mCountDownTimeToast.cancel();
            }
        }
    };

    @OnClick({R.id.three_button_start, R.id.three_button_cancel})
    public void onClickThreeButton(View v) {
        if (null == mCountDownTimeToast) {
            mCountDownTimeToast = makeToast(this);
            mCountDownTimeToast.setGravity(Gravity.TOP | Gravity.LEFT, 30, 30);
        }
        if (v.getId() == R.id.three_button_start) {
            cdt.start();
            Log.d(TAG, "CountDownTimer start show");
        }
        if (v.getId() == R.id.three_button_cancel) {
            cdt.cancel();
            threeTextView.setText("取消");
            Log.d(TAG, "CountDownTimer cancel");
        }
    }


    Toast對象的View布局文件(view_toast.xml) 

         

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:background="#ef3939"
          android:orientation="vertical"
           android:gravity="center_vertical|center_horizontal"
          android:padding="10dp" android:text="&quot;Hello World&quot;" android:textColor="#f7f9fb">
</TextView>

   

    創建Toast對象(下文中創建Toast對象使用該方法)

  

 public static Toast makeToast(Context context) {
        Toast toast = new Toast(context);
        toast.setDuration(Toast.LENGTH_SHORT);
        TextView view = (TextView) LayoutInflater.from(context).inflate(R.layout.view_toast, null);
        toast.setView(view);
        return toast;
    }

   

   上述代碼通過CountDownTimer實現指定Toast顯示時長和控制Toast顯示與消失,重構之后代碼如下:


public void showToast1(final Toast toast, long duration) {
        final long SHORT = 2000;
        final long LONG = 3500;
        final long ONE_SECOND = 1000;
        final long d = duration <= SHORT ? SHORT : duration > LONG ? duration : LONG;
        new CountDownTimer(Math.max(d, duration), ONE_SECOND) {

            @Override
            public void onTick(long millisUntilFinished) {
                toast.show();
            }

            @Override
            public void onFinish() {
                toast.cancel();
            }
        }.start();
    }

   

  3.通過Handler消息機制實現

  

public void showToast2(final Toast toast, long duration) {
        final long SHORT = 2000;
        final long LONG = 3500;
        final long ONE_SECOND = 1000;
        final long d = duration <= SHORT ? SHORT : duration > LONG ? duration : LONG;
        final int what = 1;
        final Handler handler = new Handler() {
            long remainder = d;

            @Override
            public void handleMessage(Message msg) {
                if (msg.what == what) {
                    toast.show();
                    if (remainder >= ONE_SECOND) {
                        remainder -= ONE_SECOND;
                        sendEmptyMessageDelayed(what, ONE_SECOND);
                    } else {
                        removeMessages(what);
                    }
                }
            }
        };
        handler.sendEmptyMessage(what);
    }

   

   其實這種實現和CountDownTimer實現的機制一樣的。


  4. Toast的指定時長顯示其實就是不斷的調用Toast的show()方法,其中show()方法中實現了將Toast對象添加到INotificationManager的Toast隊列中去。具體細節可參見Toast(android.widget.Toast)源碼。


  5. 為什么要給Toast指定顯示時長呢? 


    這或許不是個好主意。Toast的無焦點短時間自動消失機制就是為了給用戶顯示信息而不會產生較大干擾。如果長時間顯示并且具有更多交互和事件處理,這就背離了Toast的本意,這樣的場景可以考慮使用Notification,Dialog來實現。


    使用Toast場景中更多的是關注其View和顯示的位置,這可以實現更多有意思的東西,比如冒泡提示,使用向導等。在實踐中則需要根據具體情況慎重選擇和合理應用。

  

向AI問一下細節

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

AI

武夷山市| 东兴市| 株洲县| 永丰县| 安溪县| 梁平县| 海南省| 大新县| 民丰县| 益阳市| 尖扎县| 新丰县| 乌海市| 周至县| 凌源市| 内黄县| 慈利县| 五莲县| 城口县| 旺苍县| 潼南县| 尉氏县| 西林县| 垦利县| 射阳县| 正蓝旗| 英超| 台南县| 易门县| 洱源县| 公安县| 灵宝市| 太仓市| 普安县| 禹州市| 司法| 工布江达县| 武冈市| 江西省| 麻栗坡县| 栾城县|