亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Toast

系統 1786 0
Toast的基本原理其實就是將一個View添加到WindowManager中,讓WindowManager來把View顯示出來。(WindowManager可以將View顯示在任何地方,任何Activity之上)


Toast的默認屬性
Java代碼 收藏代碼
  1. //對其方式為:水平居中,并在底部
  2. mGravity=Gravtiy.CENTER_HORIZONTAL|Gravtiy.BOTTOM;
  3. mX= 0 ;
  4. mY=context.getResources().getDimensionPixelSize(com.android.internal.R.dimen.toast_y_offset);
  5. mHorizontalMargin= 0 ;
  6. mVerticalMargin= 0 ;
  7. 所以用Toast.makeText(getApplicationContext(),R.string.text,Toast.LENGTH_SHORT).show();生成的Toast總是處在底部水平居中的位置



在指定x, y處顯示Toast
Java代碼 收藏代碼
  1. //在(50,100)處顯示Toast
  2. Toasttoast=Toast.makeText(getApplicationContext(), "toastuse" ,Toast.LENGTH_SHORT);
  3. toast.setGravity(Gravity.TOP|Gravity.LEFT, 50 , 100 );
  4. toast.show();
  5. //如果使用Gravity.NO_GRAVITY,后面的x,y就是相對于屏幕的中心點的(估計android是默認這么處理的)
  6. Toasttoast=Toast.makeText(getApplicationContext(), "toastuse" ,Toast.LENGTH_SHORT);
  7. toast.setGravity(Gravity.NO_GRAVITY, 50 , 100 );
  8. toast.show();
  9. //用margin來控制toast的位置
  10. Toasttoast=Toast.makeText(getApplicationContext(), "toastuse" ,Toast.LENGTH_SHORT);
  11. toast.setGravity(Gravity.LEFT|Gravity.TOP, 0 , 0 );
  12. //leftMargin,topMargin分別是容器width,height的%多少(這里是10%和20%)
  13. toast.setMargin( 0 .1F, 0 .2F);
  14. toast.show();



指定View的Toast
Java代碼 收藏代碼
  1. //布局xml:R.layout.toast
  2. <Button
  3. xmlns:android= "http://schemas.android.com/apk/res/android"
  4. android:id= "@android:id/message"
  5. android:layout_width= "fill_parent"
  6. android:layout_height= "wrap_content" />
  7. Toasttoast= new Toast(getApplicationContext());
  8. toast.setView(LayoutInflater.from(getApplicationContext()).inflate(R.layout.toast, null ));
  9. toast.setText( "toastuse" );
  10. //Button是否fill_parent是由gravity控制的,xml中的不起任何作用
  11. toast.setGravity(toast.getGravity()|Gravity.FILL_HORIZONTAL,
  12. toast.getXOffset(),toast.getYOffset());
  13. toast.setDuration(Toast.LENGTH_SHORT);
  14. toast.show();

Toast部分源碼
Java代碼 收藏代碼
  1. //Toast的構造器只設置了mY這個屬性。mNextView,mDuration都沒有設置(用makeText的話,這兩個屬性會設置)
  2. public Toast(Contextcontext){
  3. mContext=context;
  4. mTN= new TN();
  5. mY=context.getResources().getDimensionPixelSize(com.android.internal.R.dimen.toast_y_offset);
  6. }
  7. //setText方法,需要將顯示text的view的id設為@android:id/message,否則會拋RuntimeException
  8. public void setText(CharSequences){
  9. if (mNextView== null ){
  10. throw new RuntimeException( "ThisToastwasnotcreatedwithToast.makeText()" );
  11. }
  12. TextViewtv=(TextView)mNextView.findViewById(com.android.internal.R.id.message);
  13. if (tv== null ){
  14. throw new RuntimeException( "ThisToastwasnotcreatedwithToast.makeText()" );
  15. }
  16. tv.setText(s);
  17. }




一直顯示的Toast
實現原理是:在Toast隱藏之前,再show一個相同的Toast,來實現長顯示的假象
Java代碼 收藏代碼
  1. private class ToastWrapper{
  2. private ToastmToast;
  3. private HandlermHandler;
  4. private RunnablemShowToast= new Runnable(){
  5. @Override
  6. public void run(){
  7. continueShow();
  8. }
  9. };
  10. private boolean mCancelled= true ;
  11. public ToastWrapper(Contextctxt){
  12. this (ctxt, new Handler());
  13. }
  14. public ToastWrapper(Contextctxt,Handlerhandler){
  15. mToast=Toast.makeText(ctxt, null ,Toast.LENGTH_SHORT);
  16. mHandler=handler;
  17. }
  18. public ToastgetToast(){
  19. return mToast;
  20. }
  21. public void showUntilCancel(){
  22. if (mCancelled){
  23. mCancelled= false ;
  24. mToast.setDuration(Toast.LENGTH_LONG);
  25. continueShow();
  26. }
  27. }
  28. public void cancel(){
  29. mCancelled= true ;
  30. mToast.cancel();
  31. }
  32. private void continueShow(){
  33. if (mCancelled){
  34. return ;
  35. }
  36. mToast.show();
  37. mHandler.postDelayed(mShowToast, 3000 );
  38. }
  39. }

使用ToastWrapper
Java代碼 收藏代碼
  1. //一直顯示的toast
  2. toastWrapper= new ToastWrapper(getApplicationContext());
  3. Toasttoast=toastWrapper.getToast();
  4. toast.setText( "toastwrapper" );
  5. //...
  6. Buttonbutton= new Button(getApplicationContext());
  7. button.setText( "一直顯示toast" );
  8. button.setOnClickListener( new View.OnClickListener(){
  9. @Override
  10. public void onClick(Viewview){
  11. toastWrapper.showUntilCancel();
  12. }
  13. });
  14. Buttonbutton= new Button(getApplicationContext());
  15. button.setText( "隱藏toast" );
  16. button.setOnClickListener( new View.OnClickListener(){
  17. @Override
  18. public void onClick(Viewview){
  19. toastWrapper.cancel();
  20. }
  21. });
  22. //一搬的toast
  23. Buttonbutton= new Button(getApplicationContext());
  24. button.setText( "一般的toast" );
  25. button.setOnClickListener( new View.OnClickListener(){
  26. @Override
  27. public void onClick(Viewview){
  28. Toasttoast=toastWrapper.getToast();
  29. toast.setDuration(Toast.LENGTH_SHORT);
  30. toast.show();
  31. }
  32. });

Android 服務service里面出Toast:

  1. if (phoneIsInUse())
  2. {
  3. new Thread( new Runnable(){
  4. public void run(){
  5. Looper.prepare();
  6. Toast
  7. .makeText(
  8. VuiService. this ,
  9. "請結束通話后再試" ,Toast.LENGTH_LONG).show();
  10. Looper.loop();
  11. }
  12. }).start();
  13. return ;
  14. }

Toast


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 青青免费视频视频在线 | 欧美性猛交99久久久久99 | 99热这里都是国产精品 | 久操福利视频 | 伦伦影院精品一区 | 亚洲欧洲日韩在线 | 成年女人18级毛片毛片 | 久久99影院网久久久久久 | 99热这里只有精品在线播放 | 亚洲国产成人久久一区久久 | 久久资源365 | 男女一级做片a性视频 | 日本一级片免费观看 | 精品免费国产一区二区三区 | 亚洲综合免费 | 免费看国产一级特黄aa大片 | 青青青激情视频在线最新 | 欧美性色欧美a在线观看 | 成熟女人50岁一级毛片不卡 | 亚洲国产欧美在线 | 离线枕边人国语在线影视 | 一本一本久久a久久综合精品蜜桃 | 男女午夜激情 | 奇米成人网 | 狠狠操综合 | 亚洲成在人线中文字幕 | 天天操精品 | 色婷婷一区二区三区四区成人 | 亚洲精品一区二区三区香蕉在线看 | 色老头网站久久网 | 国产一级免费视频 | 久久精品动漫99精品动漫 | 国产日韩精品一区在线不卡 | 国产黄色影院 | 国产亚洲精品久久久久久小说 | 久久思 | 波多野结衣一区二区三区高清在线 | 久久97精品久久久久久久看片 | 国产成人99精品免费观看 | 就操视频 | 国产青草亚洲香蕉精品久久 |