本人在项目开发过程,需要实现一个“来电归属地”的功能,因此用到了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();

}

}

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐