在 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);
}
我只是覆盖了这个 dispatchTouchEvent 和 dispatchKeyEvent 和
创建自己的 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;
}
}
现在我希望它能像其他按钮一样可以点击。
我正在尝试为按钮构建简单的库, 在我下面创建的库文件夹中 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);
}
我只是覆盖了这个 dispatchTouchEvent 和 dispatchKeyEvent 和 创建自己的 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;
}
}
现在我希望它能像其他按钮一样可以点击。