本人在项目开发过程,需要实现一个“来电归属地”的功能,因此用到了Toast。但Toast的显示时间,不受我们控制,系统只提供了两个配置参数,分别是LENGTH_LONG,LENGTH_SHORT。因为要让Toast长期显示,需要另外一个线程,每隔一个时间段,就循环显示一次。
先说明一下,本次需要用到Handle机制,因此不了解或者不熟悉Handle的同学,请先去看看Android上的Handle机制!
下面开始讲解代码实现详情!
先写一个包装类,就叫MyToast吧,如下
public class MyToast {
private Context mContext = null;
private Toast mToast = null;
private Handler mHandler = null;
private Runnable mToastThread = new Runnable() {
@Override
public void run() {
mToast.show();
mHandler.postDelayed(mToastThread, 3000);//每隔3秒显示一次,经测试,这个时间间隔效果是最好
}
};
public MyToast(Context context){
mContext = context;
mHandler = new Handler(mContext.getMainLooper());
mToast = Toast.makeText(mContext, "自由@飞翔", Toast.LENGTH_LONG);
}
public void setText(String text){
mToast.setText(text);
}
public void show(){
mHandler.post(mToastThread);
}
public void cancel() {
mHandler.removeCallbacks(mToastThread);//先把显示线程删除
mToast.cancel();// 把最后一个线程的显示效果cancel掉,就一了百了了
}
}
MainActivity 的代码如下:
public class MainActivity extends Activity implements OnClickListener{
private Button show_button;
private Button cancel_button;
private MyToast myToast;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
show_button = (Button) findViewById(R.id.show_button);
cancel_button = (Button) findViewById(R.id.cancel_button);
show_button.setOnClickListener(this);
cancel_button.setOnClickListener(this);
myToast = new MyToast(this);
}
@Override
public void onClick(View v) {
if(v == show_button){
myToast.show();
}else if (v == cancel_button) {
myToast.cancel();
}
}
}
分享到:
相关推荐
这就是`Toast`和`Handler`间隔使用的目的。 `Toast`是Android系统提供的一个简单易用的组件,它可以在屏幕的某个位置短暂显示一条信息,然后自动消失。默认提供了`LENGTH_SHORT`和`LENGTH_LONG`两种显示时长,但...
4. **避免循环调用**:如果`Toast`在循环或定时任务中使用,可以设置一个标志位来控制是否需要显示,或者使用`Handler`延迟调用来间隔显示。 5. **使用Snackbar替代**:对于更复杂的提示需求,可以考虑使用`...
4. **处理多个`Toast`**: 创建一个队列来管理待显示的`Toast`,并使用Handler或者异步任务来控制显示顺序和时间间隔,这样就可以实现连续、快速地显示多个`Toast`。 5. **动画效果**: 可以通过修改`View`的属性(如...
编写一个程序,按下按钮后间隔3秒自动弹出一个Toast显示当前时间,按返回时有弹出对话框提示是否退出程序,按确认后退出程序 这是android studio文档,eclipse只需要借鉴代码复制粘贴即可
这里我们用`Handler`和`Runnable`来控制时间间隔: ```java public class DoubleTapHelper implements View.OnClickListener { private static final int DOUBLE_CLICK_DELAY = 300; // 双击间隔时间,单位为...
4. 使用Handler取消计时器:在用户没有在规定时间内按下第二次返回键的情况下,通过Handler的`removeCallbacks()`方法取消计时器的任务,防止计数器被错误地重置。 三、注意事项 1. 在其他Activity中也需要重写`...
传统的实现方式通常会使用`Timer`和`Handler`,但这种方式代码复杂,且存在一些潜在的问题,如内存泄漏。在本示例中,我们将探讨如何使用`CountDownTimer`这个更简洁、易用的类来实现验证码倒计时。 `...
定时器是iOS和macOS开发中的一个关键组件,它允许开发者在指定的时间间隔内执行某个任务。在Swift中,我们可以使用`Timer`类来创建和管理定时器。创建定时器通常包括以下几个步骤:1) 使用`RunLoop.main.addTimer...
`CountDownTimer`类提供了一种简单而有效的方式,用于实现倒计时功能,无需深入理解线程和Handler的复杂性。 #### CountDownTimer简介 `CountDownTimer`是Android SDK中提供的一个用于执行倒计时任务的类。它简化...
8. **对话框和 toast**:统一管理全局的提示信息,如自定义对话框和Toast的显示。 9. **动画**:封装一些常用的动画效果,如渐变、旋转、缩放等,提高UI交互的体验。 10. **偏好设置**:简化SharedPreferences的...
此外,你还可以使用`Handler`或`CountDownTimer`来替代`Toast`来提供更友好的用户反馈,比如显示一个倒计时提示,告诉用户他们还有多长时间可以按第二次返回键。 总结来说,实现“Android按两次返回退出应用”的...
值得注意的是,虽然用户可能期望通过双击退出来节省资源,但Google官方并不推荐强制关闭应用,因为Android系统会自行管理应用的内存使用。过度关注退出操作可能会对用户体验产生负面影响,尤其是在系统资源管理方面...
可以使用 `runOnUiThread` 或 `Handler` 来更新UI: ```java @Override public void onTick(long millisUntilFinished) { int secondsRemaining = (int) (millisUntilFinished / 1000); // 更新UI,例如更新...
本篇将详细阐述`Android常用工具类Utils`的相关知识点,涵盖系统操作、图像处理、对话框管理、Toast提示、文件操作、日志记录、通知栏推送、SharedPreferences存储、线程管理和时间日期处理等方面。 1. **系统工具*...
- **执行结果**:这段代码会导致异常,因为直接创建`Toast`对象后不能使用`setText()`方法来设置提示框文本。 **知识点18:`setOnTouchEvent`返回值的区别** - **区别**:返回`true`表示这个消息已经被处理结束,...
在Android开发中,多线程更新页面信息是一个常见的需求,主要为了避免UI阻塞,提高用户体验。以下是几种在Android中更新UI线程的方式: ...同时,需要注意避免内存泄漏和线程安全问题,特别是在使用Handler时。
new Handler().postDelayed(new Runnable() { @Override public void run() { backPressCount = 0; } }, TIME_INTERVAL); } else { backPressCount = 0; finish(); // 结束当前Activity return true; } ...
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); backPressCount++; new Handler().postDelayed(new Runnable() { @Override public void run() { backPressCount = 0; // 如果2秒内...
Toast.makeText(context, "再按一次退出程序", Toast.LENGTH_SHORT).show(); } Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { BACK_PRESSED_COUNT ...