zoukankan      html  css  js  c++  java
  • Toast的用法(可以设置显示时间,自定义布局的,线程中的Toast)

          

    自定义的Toast类

    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <Button
            android:id="@+id/button01_id"
            android:layout_marginTop="20dp"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="显示自定义toast" />
        
        <Button
            android:id="@+id/button02_id"
            android:layout_marginTop="20dp"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="显示可以控制显示时间的toast" />
        
        <Button
            android:id="@+id/button03_id"
            android:layout_marginTop="20dp"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="显示由代码创建的toast" />
        
        <Button
            android:id="@+id/button04_id"
            android:layout_marginTop="20dp"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="在其他线程中的toast" />
    </LinearLayout>

    自定义toast的布局界面

    toast.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toast_layout_id"
        android:orientation="vertical"
        android:padding="10dp"
        android:layout_width="200dp"
        android:layout_height="150dp"
        android:background="#000000">
        
        <ImageView 
            android:id="@+id/image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/kale"/>
        
        <TextView 
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="toast"
            android:textColor="#FFF"/>
        
    </LinearLayout>

    myToast.java

    package com.kale.toast;
    
    import android.content.Context;
    import android.os.Handler;
    import android.view.View;
    import android.widget.Toast;
    
    /*
     * Toast自定义显示时间
     * 使用方法
     * 1.先初始化类 MyToast myToast = new MyToast(this);
     * 2.显示消息   myToast.setText("要显示的内容");//设置要显示的内容
     *             myToast.show(8000);  //传入消息显示时间,单位毫秒,最少2000毫秒,并且只能是2000的倍数。
     *             传入0时会一直显示,只有调用myToast.cancel();时才会取消。
     * 3.取消消息显示   myToast.cancel();
     * */
    
    public class MyToast {
    
        private Context mContext = null;
        private Toast mToast = null;
        private Handler mHandler = null;
        private int duration = 0;
        private int currDuration = 0;
        private final int DEFAULT=2000;
        private Runnable mToastThread = new Runnable() {
        
        public void run() {
            mToast.show();
            mHandler.postDelayed(mToastThread, DEFAULT);// 每隔2秒显示一次
            if (duration != 0) {
                if (currDuration <= duration) {
                    currDuration += DEFAULT;
                } 
                else {
                    cancel();
                }
            }
            
            }
        };
        
        public MyToast(Context context) {
            mContext = context;
            currDuration=DEFAULT;
            mHandler = new Handler(mContext.getMainLooper());
            mToast = Toast.makeText(mContext, "", Toast.LENGTH_LONG);
        }
        
        public void setText(String text) {
            mToast.setText(text);
        }
        
        public void show(int duration) {
            this.duration = duration;
            mHandler.post(mToastThread);
        }
        
        public void setGravity(int gravity, int xOffset, int yOffset){
            mToast.setGravity(gravity, xOffset, yOffset);
        }
        
        public void setDuration(int duration){
            mToast.setDuration(duration);
        }
        
        public void setView(View view){
            mToast.setView(view);
        }
        
        public void cancel( ) {
            mHandler.removeCallbacks(mToastThread);// 先把显示线程删除
            mToast.cancel();// 把最后一个线程的显示效果cancel掉,就一了百了了
            currDuration = DEFAULT;
        }
    }

    MainActivity.java

    package com.kale.toast;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Looper;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        Button btn01,btn02,btn03,btn04;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            viewInit();
            ButtonListener listener = new ButtonListener();
            btn01.setOnClickListener(listener);
            btn02.setOnClickListener(listener);
            btn03.setOnClickListener(listener);
            btn04.setOnClickListener(listener);
            
            
        }
        
        public class ButtonListener implements OnClickListener{
    
            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                switch (v.getId()) {
                case R.id.button01_id:
                    firstToast();
                    break;
                case R.id.button02_id:
                    secondToast();
                    break;
                case R.id.button03_id:
                    thirdToast();
                    break;
                case R.id.button04_id:
                    otherToast();
                default:
                    break;
                }
            }
            
        }
    
    
        public void firstToast() {
            //获取LayoutInflater对象,该对象能把XML文件转换为与之一直的View对象  
            LayoutInflater inflater = getLayoutInflater();  
            //根据指定的布局文件创建一个具有层级关系的View对象  
            //第二个参数为View对象的根节点,即LinearLayout的ID  
            View layout = inflater.inflate(R.layout.toast, 
                    (ViewGroup) findViewById(R.id.toast_layout_id));  
              
            //查找ImageView控件  
            //注意是在layout中查找  
            ImageView image = (ImageView) layout.findViewById(R.id.image);  
            image.setImageResource(R.drawable.kale);  
            TextView text = (TextView) layout.findViewById(R.id.text);  
            text.setText("自定义Toast");  
            
              Toast toast = new Toast(getApplicationContext());
            //设置Toast的显示位置,后两个参数是偏移量
            toast.setGravity(Gravity.CENTER, 0, 100);
            toast.setView(layout);
            toast.setDuration(Toast.LENGTH_LONG);
            toast.show();
        }
        
        public void secondToast() {
            View view = getLayoutInflater().inflate(R.layout.toast, null);
            MyToast myToast = new MyToast(MainActivity.this);
            myToast.setText("显示时间为8000毫秒");//设置要显示的内容
            myToast.setView(view);
            myToast.show(8000);  //传入消息显示时间,单位毫秒,最少2000毫秒,并且只能是2000的倍数。
        }
        
        public void thirdToast() {
            ImageView image = new ImageView(getApplicationContext());
            image.setImageResource(R.drawable.ic_launcher);
            
            LinearLayout ll = new LinearLayout(getApplicationContext());
            ll.addView(image);
            
            Toast toast = new Toast(getApplicationContext());
            toast.setView(ll);
            toast.setDuration(0);
            toast.show();
        }
        
        public void otherToast() {
            System.out.println("other");
            new Thread(){
                @Override
                public void run() {
                     Looper.prepare();//先移除
                     Toast.makeText(getApplicationContext(),"在其他线程中的toast",Toast.LENGTH_SHORT).show();  
                     Looper.loop();// 进入loop中的循环,查看消息队列
                }
             }.start();
    
        }
    
        
        private void viewInit() {
            btn01 = (Button)findViewById(R.id.button01_id);
            btn02 = (Button)findViewById(R.id.button02_id);
            btn03 = (Button)findViewById(R.id.button03_id);
            btn04 = (Button)findViewById(R.id.button04_id);
        }
    }

    源码下载:http://download.csdn.net/detail/shark0017/7654053

  • 相关阅读:
    实现微信朋友圈点击评论按钮时cell上移
    UITableView的横向使用
    用Xcode6的Leaks检测内存泄漏
    IOS8设备连接XCODE6真机调试报错"Could not inspect the application package"
    Implicit declaration of function 'ether_ntoa' is invalid in C99
    .xcodeprok cannot be opened because the project file cannot be parsed
    根据图片的链接获取图片的宽高
    关于UIWebView设置高度自适应的问题
    reason: 'data parameter is nil'
    CSS图标文字对齐和表单输入框文字对齐兼容
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/3855557.html
Copyright © 2011-2022 走看看