亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 系統(tǒng) > Android > 正文

Android開(kāi)發(fā)技巧之永不關(guān)閉的Toast信息框(長(zhǎng)時(shí)間顯示而非系統(tǒng)關(guān)閉)

2020-04-11 12:32:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Toast信息提示框之所以在顯示一定時(shí)間后會(huì)自動(dòng)關(guān)閉,是因?yàn)樵谙到y(tǒng)中有一個(gè)Toast隊(duì)列。系統(tǒng)會(huì)依次從隊(duì)列中取(出隊(duì)列)一個(gè)Toast,并顯示它。在顯示一段時(shí)間后,再關(guān)閉,然后再顯示下一個(gè)Toast信息提示框。直到Toast隊(duì)列中所有Toast都顯示完為止。那么有些時(shí)候需要這個(gè)Toast信息提示框長(zhǎng)時(shí)間顯示,直到需要關(guān)閉它時(shí)通過(guò)代碼來(lái)控制,而不是讓系統(tǒng)自動(dòng)來(lái)關(guān)閉Toast信息提示框。不過(guò)這個(gè)要求對(duì)于Toast本身來(lái)說(shuō)有些過(guò)分,因?yàn)門oast類并沒(méi)有提供這個(gè)功能。雖然如此,但方法總比問(wèn)題多。通過(guò)一些特殊的處理還是可以實(shí)現(xiàn)這個(gè)功能的,而且并不復(fù)雜。

從7.3.1節(jié)的內(nèi)容可以知道,Toast信息提示框需要調(diào)用Toast.show方法來(lái)顯示。下面來(lái)看一下show方法的源代碼。
復(fù)制代碼 代碼如下:

publicvoidshow(){
if(mNextView==null){
thrownewRuntimeException("setViewmusthavebeencalled");
}
INotificationManagerservice=getService();
Stringpkg=mContext.getPackageName();
TNtn=mTN;
try{
//將當(dāng)前Toast加入到Toast隊(duì)列
service.enqueueToast(pkg,tn,mDuration);
}catch(RemoteExceptione){
//Empty
}
}

show方法的代碼并不復(fù)雜,可以很容易找到如下的代碼。
復(fù)制代碼 代碼如下:

service.enqueueToast(pkg,tn,mDuration);

從上面的代碼可以很容易推斷出它的功能是將當(dāng)前的Toast加入到系統(tǒng)的Toast隊(duì)列中??吹竭@里,各位讀者應(yīng)該想到。雖然show方法的表面功能是顯示Toast信息提示框,但其實(shí)際的功能是將Toast加入到隊(duì)列中,再由系統(tǒng)根據(jù)Toast隊(duì)列來(lái)顯示Toast信息提示框。那么我們經(jīng)過(guò)更進(jìn)一步地思考,可以大膽地做出一個(gè)初步的方案。既然系統(tǒng)的Toast隊(duì)列可以顯示Toast信息提示框,那么我們?yōu)槭裁床豢梢宰约簛?lái)顯示它呢?這樣不是可以自己來(lái)控制Toast的信息提示框的顯示和關(guān)閉了嗎!當(dāng)然,這就不能再調(diào)用show方法來(lái)顯示Toast信息提示框了(因?yàn)閟how方法會(huì)將Toast加入隊(duì)列,這樣我們就控制不了Toast了)。

既然初步方案已擬定,現(xiàn)在就來(lái)實(shí)施它。先在Toast類找一下還有沒(méi)有其他的show方法。結(jié)果發(fā)現(xiàn)了一個(gè)TN類,該類是Toast的一個(gè)內(nèi)嵌類。在TN類中有一個(gè)show方法。TN是ITransientNotification.Stub的子類。從ITransientNotification和TN類中的show方法初步推斷(因?yàn)門ransient的中文意思是“短暫的”)系統(tǒng)是從Toast隊(duì)列中獲得了Toast對(duì)象后,利用TN對(duì)象的show方法顯示Toast,再利用TN.hide方法來(lái)關(guān)閉Toast。首先聲明,這只是假設(shè),我們還不知道這么做是否可行!當(dāng)然,這也是科學(xué)研究的一般方法,先推斷或假設(shè),然后再證明推斷或假設(shè)。

現(xiàn)在關(guān)鍵的一步是獲得TN對(duì)象。遺憾的是TN被聲明成private類型,外部無(wú)法訪問(wèn)。不過(guò)別著急。在Toast類中有一個(gè)mTN變量。雖然不是public變量,但仍然可以通過(guò)反射技術(shù)訪問(wèn)該變量。mTN變量會(huì)在創(chuàng)建Toast對(duì)象時(shí)初始化。因此,只要獲得mTN變量,就獲得了TN對(duì)象。下面的代碼顯示了一個(gè)永遠(yuǎn)不會(huì)自動(dòng)關(guān)閉的Toast信息提示框。
復(fù)制代碼 代碼如下:

//先創(chuàng)建一個(gè)Toast對(duì)象
Toasttoast=Toast.makeText(this,"永不消失的Toast",Toast.LENGTH_SHORT);
//設(shè)置Toast信息提示框顯示的位置(在屏幕頂部水平居中顯示)
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL,0,0);
try
{
//從Toast對(duì)象中獲得mTN變量
Fieldfield=toast.getClass().getDeclaredField("mTN");
field.setAccessible(true);
Objectobj=field.get(toast);
//TN對(duì)象中獲得了show方法
Methodmethod=obj.getClass().getDeclaredMethod("show",null);
//調(diào)用show方法來(lái)顯示Toast信息提示框
method.invoke(obj,null);
}
catch(Exceptione)
{
}

上面的代碼中try{…}catch(…){…}語(yǔ)句中的代碼是關(guān)鍵。先利用事先創(chuàng)建好的Toast對(duì)象獲得了mTN變量。然后再利用反射技術(shù)獲得了TN對(duì)象的show方法。
關(guān)閉Toast和顯示Toast的方法類似,只是需要獲得hide方法,代碼如下:
復(fù)制代碼 代碼如下:

try
{
//需要將前面代碼中的obj變量變成類變量。這樣在多個(gè)地方就都可以訪問(wèn)了
Methodmethod=obj.getClass().getDeclaredMethod("hide",null);
method.invoke(obj,null);
}
catch(Exceptione)
{
}

上面的代碼已經(jīng)很完美地實(shí)現(xiàn)了通過(guò)代碼控制Toast信息提示框顯示和關(guān)閉的功能。但如果想實(shí)現(xiàn)得更完美,可以在AndroidSDK源代碼中找一個(gè)叫ITransientNotification.aidl的文件(該文件是AIDL服務(wù)定義文件,將在后面詳細(xì)介紹),并在Android工程的src目錄中建一個(gè)android.app包,將這個(gè)文件放到這個(gè)包中。然后ADT會(huì)自動(dòng)在gen目錄中生成了一個(gè)android.app包,包中有一個(gè)ITransientNotification.java文件。由于AndroidSDK自帶的ItransientNotification接口屬于內(nèi)部資源,外部程序無(wú)法訪問(wèn),因此,只能將從Toast對(duì)象中獲得的mTN變量轉(zhuǎn)換成剛才生成的ITransientNotification對(duì)象了。這樣就不需要使反射技術(shù)獲得show和hide方法了。經(jīng)過(guò)改良的顯示和關(guān)閉Toast信息提示框的代碼如下:
復(fù)制代碼 代碼如下:

ITransientNotificationnotification=(ITransientNotification)field.get(toast);
//顯示Toast信息提示框
notification.show();
//關(guān)閉Toast信息提示框
notification.hide();
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
av男人天堂av| 日韩国产在线观看一区| 91精品一区二区| 成人国产亚洲精品a区天堂华泰| 国产一区福利视频| 精品第一国产综合精品aⅴ| 国产亚洲婷婷免费| 国产区在线看| 91精品入口蜜桃| 成人情趣视频| 国产主播性色av福利精品一区| 青青草原国产在线观看| 加勒比色综合久久久久久久久| 麻豆电影传媒二区| 欧洲一区二区视频| 亚洲成人av中文字幕| 欧美唯美清纯偷拍| 欧美一区二区视频网站| 欧美精品久久久久久久自慰| 国产探花在线精品| 人妻换人妻a片爽麻豆| 久久久精品免费看| 亚洲激情免费观看| 国产精品无码人妻一区二区在线| 日韩成人短视频| 艳妇乳肉亭妇荡乳av| 亚洲天堂2017| 在线观看你懂| 国产色一区二区| 欧美精品亚洲一区二区在线播放| 16—17女人毛片毛片| 亚洲精品日产精品乱码不卡| 国产青草视频在线观看视频| 国产精品中文在线| 国产情侣一区二区| 成人字幕网zmw| 欧美精品一区二区三区蜜桃| 亚洲精品视频免费观看| 刘亦菲国产毛片bd| 韩国女主播成人在线| 日韩电影免费观看高清完整版| 亚洲最大免费| 国产免费黄网站| 日韩情爱电影在线观看| 日韩一区二区三区免费播放| 亚洲伦理影院| 韩国三级丰满少妇高潮| 欧美gayvideo| 欧美放荡办公室videos4k| 亚洲色图日韩精品| 欧美国产成人精品一区二区三区| 国产亚洲精品久久久久久777| 黄色录像二级片| 欧美xxxx免费虐| 9a蜜桃久久久久久免费| 日韩精品一卡二卡三卡四卡无卡| 欧美成人在线影院| 欧美成人精品3d动漫h| 男人天堂2017| 在线观看视频一区二区欧美日韩| 牛牛影视一区二区三区免费看| 首页综合国产亚洲丝袜| 亚洲第一导航| 国内成+人亚洲| 特大黑人巨人吊xxxx| 亚洲国产成人爱av在线播放| 日本高清免费观看| 中文字幕有码在线视频| 成年人小视频在线观看| 国产亚洲欧美日韩日本| 日本黄色免费网站| 亚洲成人动漫在线播放| 亚洲一区色图| av资源免费看| 艳母动漫在线观看| www.17c.com喷水少妇| 国产日韩换脸av一区在线观看| 91久久精品www人人做人人爽| 欧美zzoo| 日韩av在线一区| 热久久久久久久久| 天堂av中文在线| 天天色天天干天天色| 在线精品一区二区三区| 少妇一级淫片日本| 欧美自拍偷拍午夜视频| 欧美videos粗暴高清性| 国产欧美在线看| 99久久亚洲| 国产一区成人| av不卡免费看| 欧美高清性xxxxxxx| 国产精品色呦| 国产伦精品一区二区三区照片91| 91综合国产| 极品尤物av久久免费看| 免费网站免费进入在线| 在线看国产日韩| 免费看av在线| 国产伦理精品不卡| 亚洲欧美第一页| jazzjazz国产精品麻豆| 免费a级毛片永久免费| 午夜精品视频一区二区三区在线看| 欧美亚洲午夜视频在线观看| 中文字幕制服丝袜一区二区三区| 成年人在线视频免费观看| 国产激情第一页| 国产精品护士白丝一区av| japanese中文字幕| 加勒比色老久久爱综合网| 精品无码国产一区二区三区av| 男人插女人下面视频| 中文字幕欧美日韩久久| 91美女片黄在线观看91美女| 亚洲综合网站在线观看| 国产一在线精品一区在线观看| 久草视频免费在线观看| 亚洲国产精品天堂| 精品人妻伦九区久久aaa片| 日本黄xxxxxxxxx100| 中文不卡1区2区3区| 久久久精品性| 久色视频网站| 国产va在线视频| 欧美一区二区三区激情视频| 国内精品国产三级国产99| 中文字幕免费在线看线人动作大片| 91亚洲精品久久久蜜桃网站| 97在线观看免费高| 免费黄色成年网站| 日韩经典一区二区| 国产高清日韩| 亚洲熟妇一区二区三区| 日本一区二区三区免费观看| 久草在线资源站资源站| 九九视频精品在线观看| 性欧美在线视频| 欧美熟妇激情一区二区三区| 欧美日韩精品免费观看视一区二区| 不用播放器的免费av| 91干在线观看| 92精品国产成人观看免费| 精品美女在线视频| 啊v在线视频| 丝袜美腿诱惑一区二区三区| 99久久.com| 国产精品福利无圣光在线一区| 日韩精品第一页| 好吊日av在线| 日本在线精品| 亚洲蜜桃精久久久久久久| 国产福利电影在线播放| 国产区二精品视| 黄瓜视频网站| 日本一区精品| 欧美成人综合一区| 免费在线黄色电影| 国产精品麻豆va在线播放| 特黄国产免费播放| 四虎4545www国产精品| 亚洲黄色精品视频| 日本一级免费视频| 在线免费日韩片| 日韩精品每日更新| 69堂免费精品视频在线播放| 免费在线看电影| 亚洲一区二区精品在线| www.欧美日韩| 男人j进女人j| 久久99国产精品二区高清软件| 国产一级片大全| 国产视频精品在线| 黑人性受xxxx黑人xyx性爽| 在线无限看免费粉色视频| 欧美少妇一级片| 亚洲丶国产丶欧美一区二区三区| 无码人中文字幕| 一区二区三区欧美| 国产日韩欧美一区二区三区乱码| 黄色一级一级片| 欧美午夜不卡在线观看免费| 不卡中文字幕av| 天堂影视av| 久久撸在线视频| 任你躁在线精品免费| 美女www一区二区| 亚洲男人电影天堂| 无码一区二区三区在线| 欧美综合精品| 国产va免费精品高清在线观看| 国产在线精品一区在线观看麻豆| 国产高清视频一区二区| 亚洲三级在线免费| 久久伊人精品| 全国精品免费看| 在线麻豆国产传媒1国产免费| 亚洲.欧美.日本.国产综合在线| 久久美女高清视频| 国产精品久久久久久久久久辛辛| 影音先锋日韩有码| 国产精品正在播放| 日本视频一区二区不卡| 青青草视频在线免费观看| 免费观看欧美成人禁片| 精品成在人线av无码免费看| 精品电影在线观看| 亚洲美女中文字幕| 日韩在线播放视频| 国产精品久久久一区二区| 亚洲在线观看网站| 亚洲卡通动漫在线| 青娱乐国产91| 成人黄色在线视频| 凹凸成人精品亚洲精品密奴| 老牛影视av牛牛影视av| 国产不卡在线视频| 久久亚洲天堂| 91pron在线| 欧美日韩激情视频一区二区三区| 高潮毛片又色又爽免费| 久久久久久久久久久久国产精品| 国产拍欧美日韩视频二区| 亚洲成国产人片在线观看| 天天插天天操| 人人玩人人添人人澡免费| 亚洲а∨天堂久久精品喷水| 欧美激情亚洲激情| 国产精品老女人视频| 黑人巨大精品欧美黑白配亚洲| 99在线精品视频免费观看软件| 青青草免费在线观看| 精品国产精品自拍| 亚洲色大成网站www| 一本色道久久综合亚洲精品不| 久草免费在线| 国产精品久久久久久久天堂| 含羞草www国产在线视频| 97香蕉久久夜色精品国产| 日本免费在线视频观看| 欧美精品二区三区| 日韩高清在线免费观看| 青青青免费在线| 欧美孕妇与黑人孕交| 日韩mv欧美mv国产网站| 狠狠操视频网站| 国产成人精品电影久久久| 亚洲aaa视频| 欧美另类极品videosbest最新版本| 国产日韩欧美高清| 黄色三级视频在线观看| va婷婷在线免费观看| 男人天堂资源在线| 欧美成人自拍| 亚洲一区二区三区激情| 午夜久久福利影院| 午夜福利理论片在线观看| 激情综合网五月激情| 欧美一区二区三区不卡视频| 国产精品69毛片高清亚洲| 91香蕉在线视频| 国产精品丝袜一区二区三区| 欧美日韩在线视频一区二区| eeuss影院eeuss最新直达| 亚洲美女免费精品视频在线观看| 成人看片在线观看| 欧美日韩免费观看一区| 中文字幕一区二区人妻视频| 一区二区三区网| 精品视频久久久| 亚洲青青青在线视频| 欧美激情在线一区| 天使と恶魔の榨精在线播放| 亚洲精品久久久久久国产精华液| 激情小说中文字幕| 国产精品精品软件视频| 9色视频在线观看| 欧美二区在线视频| 国产性生活大片| 99久久精品网站| 国产欧美一区二区精品仙草咪| 日韩精品中文在线观看| 国产91精品高潮白浆喷水| 中文一区一区三区免费| 久久精品夜色噜噜亚洲a∨| 一区二区三区成人精品| 久久久久久久久久久免费视频| 中文字幕日韩有码| 久久久免费看| 天天爱天天操天天干| 男女午夜刺激视频| 97人洗澡人人免费公开视频碰碰碰| 亚洲全部视频| 色综合激情久久| 手机看片福利永久国产日韩| 成年人性生活视频| 深夜黄色小视频| 国内精品久久久| 日韩欧美另类中文字幕| 欧美精品在线免费观看| 亚洲国产日韩综合久久精品| 日韩欧美国产大片| 亚洲一区视频在线观看视频| 国产亚洲情侣一区二区无| 欧美激情2020午夜免费观看| 羞羞免费视频网站| 久久影视精品| 久久久久久亚洲综合| 国产一区二区三区自拍| 国产欧美在线观看一区| 男女视频一区二区| 亚洲欧美日韩国产中文专区| 91污片在线观看| 91片黄在线观看| 精品人妻无码一区二区三区蜜桃一| 欧美日本一区二区三区| sese在线| 日韩福利二区| 影音先锋国产精品| 丰满人妻av一区二区三区| 欧美精品一卡两卡| 一级片在线视频| 国产在线精品一区二区三区》| 亚洲激情小视频| v天堂福利视频在线观看| 精品综合在线| 国产精品自在线拍| 国产精品探花一区二区在线观看|