亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

[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

苍梧县| 孝感市| 丰台区| 营口市| 桦川县| 济阳县| 冷水江市| 正镶白旗| 四会市| 广南县| 交城县| 江山市| 宜宾县| 石首市| 周宁县| 错那县| 明溪县| 宽城| 祁东县| 贵定县| 营山县| 赫章县| 建水县| 孝感市| 渝北区| 崇信县| 潞西市| 三原县| 天气| 苍溪县| 萨迦县| 涟水县| 巴青县| 丰宁| 大理市| 阜康市| 遂溪县| 桃江县| 酉阳| 通化县| 南雄市|