android 自定义吐司,Android自定义吐司Toast:自定义样式、自定义显示时长

Android自定义吐司Toast:自定义样式、自定义显示时长

鉴于系统toast,一般都是黑色背景且位于界面底部,我们看到有些app弹出的toast,有的在界面中间、有的在界面顶部,还有的是带图片的,那是怎么实现的呢?

了解系统toast类有哪些方法

setView( ):设置toast视图,也就是通过layout布局来控制toast显示不同的视图。

setGravity( ):设置toast显示位置。

setDuration( ):设置toast显示的时长,注意:此方法设置自定义时长不起作用,需用其他方法实现。

自定义Toast类ToastUtil:包括自定义样式、自定义显示时长

package com.nicksong.toastutil.util;

import android.content.Context;

import android.os.CountDownTimer;

import android.os.Handler;

import android.util.Log;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;

import com.nicksong.toastutil.R;

/**

* 作者:nicksong

* 创建时间:2016/11/21

* 功能描述:自定义toast样式、显示时长

*/

public class ToastUtil {

private Toast mToast;

private TextView mTextView;

private TimeCount timeCount;

private String message;

private Handler mHandler = new Handler();

private boolean canceled = true;

public ToastUtil(Context context, int layoutId, String msg) {

message = msg;

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//自定义布局

View view = inflater.inflate(layoutId, null);

//自定义toast文本

mTextView = (TextView)view.findViewById(R.id.toast_msg);

mTextView.setText(msg);

Log.i("ToastUtil", "Toast start...");

if (mToast == null) {

mToast = new Toast(context);

Log.i("ToastUtil", "Toast create...");

}

//设置toast居中显示

mToast.setGravity(Gravity.CENTER, 0, 0);

mToast.setDuration(Toast.LENGTH_LONG);

mToast.setView(view);

}

/**

* 自定义居中显示toast

*/

public void show() {

mToast.show();

Log.i("ToastUtil", "Toast show...");

}

/**

* 自定义时长、居中显示toast

* @param duration

*/

public void show(int duration) {

timeCount = new TimeCount(duration, 1000);

Log.i("ToastUtil", "Toast show...");

if (canceled) {

timeCount.start();

canceled = false;

showUntilCancel();

}

}

/**

* 隐藏toast

*/

private void hide() {

if (mToast != null) {

mToast.cancel();

}

canceled = true;

Log.i("ToastUtil", "Toast that customed duration hide...");

}

private void showUntilCancel() {

if (canceled) { //如果已经取消显示,就直接return

return;

}

mToast.show();

mHandler.postDelayed(new Runnable() {

@Override

public void run() {

Log.i("ToastUtil", "Toast showUntilCancel...");

showUntilCancel();

}

}, Toast.LENGTH_LONG);

}

/**

* 自定义计时器

*/

private class TimeCount extends CountDownTimer {

public TimeCount(long millisInFuture, long countDownInterval) {

super(millisInFuture, countDownInterval); //millisInFuture总计时长,countDownInterval时间间隔(一般为1000ms)

}

@Override

public void onTick(long millisUntilFinished) {

mTextView.setText(message + ": " + millisUntilFinished / 1000 + "s后消失");

}

@Override

public void onFinish() {

hide();

}

}

}

##具体使用方法

package com.nicksong.toastutil;

import android.content.Context;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

import com.nicksong.toastutil.util.ToastUtil;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private Context context = MainActivity.this;

private Button btDefaultToast;

private Button btCenterToast;

private Button btTopToast;

private Button btCenterImgToast1;

private Button btCenterImgToast2;

private Button btCustomDurationToast;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

initListener();

}

private void initView() {

btDefaultToast = (Button)findViewById(R.id.bt_default_toast);

btCenterToast = (Button)findViewById(R.id.bt_center_toast);

btTopToast = (Button)findViewById(R.id.bt_top_toast);

btCenterImgToast1 = (Button)findViewById(R.id.bt_center_img_toast1);

btCenterImgToast2 = (Button)findViewById(R.id.bt_center_img_toast2);

btCustomDurationToast = (Button)findViewById(R.id.bt_custom_duration_toast);

}

private void initListener() {

btDefaultToast.setOnClickListener(this);

btCenterToast.setOnClickListener(this);

btTopToast.setOnClickListener(this);

btCenterImgToast1.setOnClickListener(this);

btCenterImgToast2.setOnClickListener(this);

btCustomDurationToast.setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.bt_default_toast:

Toast.makeText(context, "默认toast", Toast.LENGTH_SHORT).show();

break;

case R.id.bt_center_toast:

Toast toast = Toast.makeText(context, "自定义居中toast", Toast.LENGTH_SHORT);

toast.setGravity(Gravity.CENTER, 0, 0);

toast.show();

break;

case R.id.bt_top_toast:

Toast toast1 = Toast.makeText(context, "自定义顶部toast", Toast.LENGTH_SHORT);

toast1.setGravity(Gravity.TOP, 0, 0);

toast1.show();

break;

case R.id.bt_center_img_toast1:

ToastUtil toastUtil = new ToastUtil(context, R.layout.toast_center, "完全自定义居中toast 1");

toastUtil.show();

break;

case R.id.bt_center_img_toast2:

ToastUtil toastUtil2 = new ToastUtil(context, R.layout.toast_center_horizontal, "完全自定义居中toast 2");

toastUtil2.show();

break;

case R.id.bt_custom_duration_toast:

ToastUtil toastUtil3 = new ToastUtil(context, R.layout.toast_center_horizontal, "带图片自定义时长toast");

toastUtil3.show(5000);

break;

default:

break;

}

}

}

##自定义样式和时长的Toast效果图 ![

a8592ace2eda06df4da3628703b2d9af.gif]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值