Android Toast 吐司

Android Toast ( 吐司 ) 一般用于提示信息的,是一种很方便的消息提示框,会在屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失

Toast 会浮在所有的窗口之上,位于屏幕的下方居中的位置,而且不会识别任何手势,比如单击动作等

Toast

Toast 是为数不多的没有 XML 创建代码的 UI 控件

常量

Toast 定义了两个常量,分别表示显示多长时间后消失

常量 说明
LENGTH_LONG 显示比较长时间
LENGTH_LONG 显示比较短时间

不过我们可以通过 Toast.setDuration(int duration) 自己定义时常

方法

方法 说明
void cancel() 如果 Toast 已经显示,则关闭 Toast, 如果 Toast 还未显示,则取消显示
void show() 显示指定持续时间的视图
int getDuration() 返回持续时间
int getGravity() 获取 Toast 应显示在屏幕上的位置
float getHorizontalMargin() 返回水平边距
float getVerticalMargin() 返回垂直边距
View getView() 返回 Toast 的 View
int getXOffset() 以 px 为单位返回 X 偏移量
int getYOffset() 以 px 为单位返回 Y 偏移量
static Toast makeText(Context context, int resId, int duration) 创建 Toast 用于显示给定的资源
static Toast makeText(Context context, CharSequence text, int duration) 创建 Toast 用于显示给定的文本
void setDuration(int duration) 设置 Toast 的显示时间
void setGravity(int gravity, int xOffset, int yOffset) 设置 Toast 在屏幕上显示的位置
void setMargin(float horizontalMargin, float verticalMargin) 设置视图的边距
void setText(int resId) 用一个资源更新 Toast 要显示的文本或资源
void setText(CharSequence s) 用一段文本更新 Toast 要显示的文本或资源
void setView(View view) 设置要显示的视图

介绍了这么多方法,现在我们就使用两种方式来创建一个 Toast

Toast.makeText()

这是我们创建 Toast 用的最多的方式

Toast.makeText(MainActivity.this, "提示的内容", Toast.LENGTH_LONG).show();

现在我们就来演示下吧,真的很简单啦

  1. 创建一个 空的 Android 项目 cn.twle.android.Toast

  2. 修改 MainActivity.java

    package cn.twle.android.toast;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Toast.makeText(MainActivity.this, "我是 Toast 啦", Toast.LENGTH_LONG).show();
        }
    }
    

定制 Toast 的文本颜色和背景颜色

我们可以通过 Toast.getView() 方法获得 Toast 的视图,这是一个 TextView ,然后就可以修改它的字体颜色和背景颜色

还可以通过 Toast.setGravity() 方法设置 Toast 显示的位置

现在我们就利用这些方法创建一个警告框

  1. 复用上面的 demo

  2. 修改 MainActivity.java

    package cn.twle.android.toast;
    
    import android.support.v7.app.AppCompatActivity;
    
    import android.graphics.Color;
    import android.os.Bundle;
    
    import android.view.Gravity;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Toast toast = Toast.makeText(MainActivity.this, "我是 Toast 啦", Toast.LENGTH_LONG);
    
            // 设置显示位置
            toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL , 0, 0);
    
            // 获取 TextView 视图
            TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
    
            // 设置 TextView 字体颜色
            v.setTextColor(Color.YELLOW);
    
            toast.show();
    
        }
    }
    

封装

因为定制 Toast 的需求很常见,所以我们一般会把他们封装成一个方法

void warnHint(String str, int showTime) {

    Toast toast = Toast.makeText(getApplicationContext(), str, showTime);

    //设置显示位置
    toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL , 0, 0);  
    TextView v = (TextView) toast.getView().findViewById(android.R.id.message);

    // 设置 TextView 字体颜色
    v.setTextColor(Color.RED);

    toast.show();   
}

定制 Toast 的视图

我们可以使用 getView() 获取 Toast 的视图 ( view ) ,然后给视图添加其它 UI 控件

现在我们就给 Toast 添加一个小图标

  1. 复用上面的 demo

  2. 下载 /static/i/android/warn_red.png 并拖到 res/drawable 目录下

  3. 修改 MainActivity.java

    package cn.twle.android.toast;
    
    import android.support.v7.app.AppCompatActivity;
    
    import android.graphics.Color;
    import android.os.Bundle;
    
    import android.view.Gravity;
    import android.widget.TextView;
    import android.widget.LinearLayout;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Toast toast = Toast.makeText(MainActivity.this, "我是 Toast 啦", Toast.LENGTH_LONG);
    
            // 设置显示位置
            toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL , 0, 0);
    
            LinearLayout layout = (LinearLayout) toast.getView();
    
            // 设置背景色为红色
            layout.setBackgroundColor(Color.RED);
    
            // 获取 TextView 视图
            TextView v = (TextView) layout.findViewById(android.R.id.message);
    
            // 设置 TextView 字体颜色
            v.setTextColor(Color.WHITE);
    
            ImageView image = new ImageView(this);
            image.setImageResource(R.drawable.warn_red);
            layout.addView(image, 0);
    
            toast.show();
        }
    }
    

Toast 完全自定义

上面这种自定义方式,巨丑无比,而且可能还不能完全满足我们的需求,要不我们就把整个 UI 重新定义一次好了

这次我们定义一个圆角带图片的 Toast

  1. 复用上面的 demo

  2. 创建圆角背景,在 res/drawable 目录下新建文件 toast_bg.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- 设置透明背景色 -->
        <solid android:color="#BADB66" />
        <!-- 设置一个黑色边框 -->
        <stroke
            android:width="1px"
            android:color="#FFFFFF" />
        <!-- 设置四个圆角的半径 -->
        <corners
            android:bottomLeftRadius="10px"
            android:bottomRightRadius="10px"
            android:topLeftRadius="10px"
            android:topRightRadius="10px" />
    
        <!-- 设置一下边距,让空间大一点 -->
        <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
    </shape>
    
  3. 创建 Toast 的布局,在 res/layout 目录下新建文件 toast_view.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/custom_toast"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/toast_bg"
        android:gravity="center_vertical"
        android:orientation="horizontal">
    
        <TextView
            android:id="@+id/message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp" />
    
        <ImageView
            android:id="@+id/icon"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:layout_marginLeft="10dp"
            android:src="@drawable/warn_red" />
    
    </LinearLayout>
    
  4. 修改 MainActivity.java

    package cn.twle.android.toast;
    
    import android.support.v7.app.AppCompatActivity;
    
    import android.graphics.Color;
    import android.os.Bundle;
    
    import android.view.Gravity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.LayoutInflater;
    import android.widget.TextView;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            LayoutInflater inflater = getLayoutInflater();
            View view = inflater.inflate(R.layout.toast_view,
                    (ViewGroup) findViewById(R.id.custom_toast));
    
            ImageView icon    = (ImageView) view.findViewById(R.id.icon);
            TextView  message = (TextView)  view.findViewById(R.id.message);
    
            message.setText("我是 Toast 啦");
    
            Toast toast = new Toast(MainActivity.this);
            toast.setGravity(Gravity.CENTER, 0, 0);
    
            toast.setDuration( Toast.LENGTH_LONG );
    
            toast.setView(view);
    
            toast.show();
        }
    }
    

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.