在 Android 自定义视图中设置 onClickListener

Set onClickListener in an Android custom view

我正在尝试为按钮构建简单的库, 在我下面创建的库文件夹中 class

 public class SimpleImageButton extends AppCompatImageView implements AppCompatImageView.OnClickListener{

    public Context mContext;
    Activity activity;

    public SimpleImageButton (Context context) {
        super(context);
        mContext = context;
        setCustomTypeface(context, null);

    }

    public SimpleImageButton (Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        setCustomTypeface(context, attrs);

    }

    public SimpleImageButton (Context context, AttributeSet attrs, int defStyleAttr) 
    {
        super(context, attrs, defStyleAttr);
        mContext = context;
        setCustomTypeface(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void setCustomTypeface(Context context, AttributeSet attrs)  {
        if(isInEditMode())
            return;
        TypedArray a = context.obtainStyledAttributes(attrs, 
        android.support.v7.appcompat.R.styleable.TextAppearance);
        setBackground(ContextCompat.getDrawable(mContext, 
    R.drawable.applogo_ads));
        a.recycle();

    }
   public void onClick(View view) {
        // here i have some functions to execute
    }
}

我的 Mainclass 在 App 文件夹中

   SimpleImageButton imgBtn= (SimpleImageButton )findViewById(R.id.clickButton);

imgBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               imgBtn.onClick(view);
              // without this line how can i reach to onclick() of simpleImageButton class
            }
        });

所以当我点击按钮时它会正常工作。但我想让库按钮直接工作,在 main activity 中没有 onClick 函数,点击按钮应该直接重定向到 SimpleImageButton class onclcik 方法

我是堆栈溢出的新手,如果语法/提问方式有任何错误,请不要介意。 谢谢。

在视图的构造函数中使用 setOnClickListener(this)。

public SimpleImageButton (Context context) {
        super(context);
        mContext = context;
        setCustomTypeface(context, null);
        setOnClickListener(this);
    }

我只是覆盖了这个 dispatchTouchEventdispatchKeyEvent 和 创建自己的 public 函数 setOnClickListener(OnClickListener listener) 以设置点击监听器

public class SimpleImageButton extends AppCompatImageView{
        //...
         private OnClickListener listener;
        
            @Override
            public boolean dispatchTouchEvent(MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    if (listener != null) listener.onClick(this);
                }
                return super.dispatchTouchEvent(event);
            }
        
            @Override
            public boolean dispatchKeyEvent(KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_UP && (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                    if (listener != null) listener.onClick(this);
                }
                return super.dispatchKeyEvent(event);
            }
            public void setOnClickListener(OnClickListener listener) {
               this.listener = listener;
            }
    }

现在我希望它能像其他按钮一样可以点击。