Activity中获取视图组件对象:
public View findViewById(@IdRes int id)
该方法以组件的资源ID为参数,返回一个视图对象View,需要强转成具体的视图类对象。
Button mTrueButton = (Button) findViewById(R.id.true_button);
设置视图组件的点击监听器:
视图组件对象调用视图对象注册监听器的方法:
public void setOnClickListener(@Nullable OnClickListener l)
该方法的参数是一个监听器,是一个实现了 OnClickListener 接口的对象,OnClickListener 接口中有一个 public void onClick(View v) 方法。
mTrueButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//监听其中需要执行的具体代码
}
});
创建提示消息:
调用Toast类的以下方法:
public static Toast makeText(Context context, CharSequence text, @Duration int duration)
public static Toast makeText(Context context, @StringRes int resId, @Duration int duration)
上面的 makeText 方法,接收三个参数:
Context: 通常是Activity的一个实例(Activity本身就是Context的子类)
第二个参数:既可以是要显示的字符串消息的资源ID,也可以是字符串本身
第三个参数:通常是两个Toast常量(Toast.LENGTH_SHORT、Toast.LENGTH_LONG)中的一个,用来指定toast消息的停留时间
makeText 方法返回Toast对象,然后调用Toast的实例方法 show() ,在屏幕上显示消息
Toast.makeText(QuizActivity.this, "这是要显示的消息", Toast.LENGTH_LONG).show();
上面直接显示消息的方式有一个问题:每次点击按钮,都会弹出一个消息,如果多次连续点击,消息会连续多次弹出。解决如下
监听消息的弹出和退出(设置上一次消息消失前,点击按钮不会有任何反应):
mTrueButton.setOnClickListener(new View.OnClickListener() {
boolean isClicked = false;
@Override
public void onClick(View v) {
//获取Toast对象
Toast toast = Toast.makeText(QuizActivity.this, "你好,你点击了确认按钮。", Toast.LENGTH_SHORT);
//获取显示消息的View对象
View view = toast.getView();
//设置显示消息的View对象的监听器
view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
//显示消息时触发
@Override
public void onViewAttachedToWindow(View v) {
isClicked = true;
}
//消息消失时触发
@Override
public void onViewDetachedFromWindow(View v) {
isClicked = false;
}
});
if (!isClicked) {
//调用Toast的实例方法 show() 显示消息
toast.show();
}
}
});
设置Toast消息显示的位置:
使用Toast的实例方法
public void setGravity(int gravity, int xOffset, int yOffset)
参数一:Gravity类的常量值(Gravity.TOP、Gravity.BOTTOM、Gravity.CENTER、Gravity.LEFT ...)
参数二:消息在x轴上的偏移量(消息默认是显示在x抽的中间的)
参数三:消息在y轴上的偏移量
mFalseButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast toast = Toast.makeText(QuizActivity.this, "你好,你点击了取消按钮。", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, -100, 0);
toast.show();
}
});