zoukankan      html  css  js  c++  java
  • 封装 Toast

    一、 ToastView.java


    1
    import android.content.Context; 2 import android.view.LayoutInflater; 3 import android.view.View; 4 import android.widget.ImageView; 5 import android.widget.LinearLayout; 6 import android.widget.TextView; 7 import android.widget.Toast; 8 9 10 public class ToastView extends LinearLayout{ 11 private static ToastView mToastView; 12 13 private TextView toastText; 14 private ImageView toastIcon; 15 private Context mContext; 16 17 private View layout; 18 private Toast mToast; 19 20 21 private ToastView(Context context) { 22 super(context,null); 23 mContext = context; 24 LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 25 layout = inflater.inflate(R.layout.toast, null); 26 27 toastIcon = (ImageView) layout.findViewById(R.id.toastIcon); 28 toastText = (TextView) layout.findViewById(R.id.toastText); 29 } 30 31 public static ToastView getInstance(Context context) { 32 if (mToastView != null) { 33 return mToastView; 34 } else { 35 if (context != null) { 36 mToastView = new ToastView(context); 37 return mToastView; 38 } else { 39 return null; 40 } 41 } 42 } 43 44 public void setIconVisiblity(int visiblity){ 45 toastIcon.setVisibility(visiblity); 46 } 47 48 public void showToast(String str,int gravity,int xoffset,int yoffest) { 49 toastText.setText(str); 50 51 if(mToast!=null){ 52 mToast.setGravity(gravity,xoffset,yoffest); 53 mToast.show(); 54 }else{ 55 mToast= new Toast(mContext); 56 mToast.setView(layout); 57 mToast.setGravity(gravity,xoffset,yoffest); 58 mToast.setDuration(Toast.LENGTH_SHORT); 59 mToast.show(); 60 } 61 } 62 63 public void showToast(String str,int gravity,int xoffset,int yoffest,int duration) { 64 toastText.setText(str); 65 duration = duration<=0 ? Toast.LENGTH_SHORT : duration; 66 67 if(mToast!=null){ 68 mToast.setGravity(gravity,xoffset,yoffest); 69 mToast.setDuration(duration); 70 mToast.show(); 71 }else{ 72 mToast= new Toast(mContext); 73 mToast.setView(layout); 74 mToast.setGravity(gravity,xoffset,yoffest); 75 mToast.setDuration(duration); 76 mToast.show(); 77 } 78 } 79 80 }

    二、toast.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="fill_parent"
     4     android:layout_height="wrap_content"
     5     android:gravity="center_vertical">
     6 
     7 
     8     <TextView
     9         android:id="@+id/toastText"
    10         android:layout_width="wrap_content"
    11         android:layout_height="@dimen/toastHeight"
    12         android:textColor="@color/title_text_color"
    13         android:background="@drawable/toast_bg"
    14         android:gravity="center"
    15         android:paddingLeft="@dimen/toastTextPaddingLeft"
    16         android:paddingRight="@dimen/toastTextPaddingRight"
    17         android:textSize="@dimen/toastTextSize"/>
    18     
    19     <ImageView
    20         android:id="@+id/toastIcon"
    21         android:layout_width="@dimen/toastIconWidth"
    22         android:layout_height="@dimen/toastIconWidth"
    23         android:layout_marginLeft="@dimen/toastIconWidth"
    24         android:scaleType="fitXY"
    25         android:layout_centerVertical="true"
    26         android:src="@drawable/toast_icon" />
    27 </RelativeLayout>

    三、Acitivity中调用

        
        //自定义的
        private void showToast(String str, int offset) {
            ToastView toast = ToastView.getInstance(RecommendActivity.this); 
            if(offset < 0){
                toast.showToast(str, Gravity.TOP | Gravity.CENTER_HORIZONTAL,0,    //默认时长的Toast
                        (int)getResources().getDimension(R.dimen.defaultToastMarginTop));
            }else{
                toast.showToast(str, Gravity.TOP | Gravity.CENTER_HORIZONTAL,0,    //自定义时长的Toast
                        (int)getResources().getDimension(R.dimen.defaultToastMarginTop), offset);
            }
        }

    封装的这个Toast没什么技术含量。

    但是,之所以把Toast定义为单例模式,是为了防止疯狂点击按钮,出现连续不断的Toast

    因为系统的Toast是维护一个队列,每次cancle只对当前的Toast 有用。所以之后的Toast还是会不停出现

    这个Toast改为单例模式之后。如果当前Toast不为空,只对其进行setText。然后show(不调用show不会出现)

    如果当前为空,才会新建一个ToastView。

  • 相关阅读:
    053-113
    053-262
    053-294
    053-494
    053-60
    053-105
    053-102
    053-218
    【转】LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter
    windows live Writer test
  • 原文地址:https://www.cnblogs.com/maxiaodoubao/p/4169536.html
Copyright © 2011-2022 走看看