Android基础知识:Activity中获取视图组件对象

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();
    }
});

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/19ba6f57584704bfa037bf2c6360f874.html