读书人

Toast跟Handler的间隔使用

发布时间: 2012-09-21 15:47:26 作者: rapoo

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

}

}

}

读书人网 >移动开发

热点推荐