为了账号安全,请及时绑定邮箱和手机立即绑定

Android:在 customView 中覆盖 onClick 时 OnClick 不起作用

Android:在 customView 中覆盖 onClick 时 OnClick 不起作用

手掌心 2023-05-17 15:00:08
我创建了一个自定义视图。我的自定义视图扩展自RelativeLayout:public class CircleProgressButton extends RelativeLayout {...在我的自定义视图中,我有一个按钮:private void initView(Context context, AttributeSet attrs) {    TypedArray typedArray = context.getTheme().obtainStyledAttributes(            attrs, R.styleable.ProgressButton, 0, 0    );    try {        progressHeight = typedArray.getInt(R.styleable.ProgressButton_progress_height, progressHeight);        progressWidth = typedArray.getInt(R.styleable.ProgressButton_progress_width, progressWidth);        progressIconSuccess = typedArray.getResourceId(R.styleable.ProgressButton_progress_iconSuccess, R.drawable.ic_done);        progressIconFail = typedArray.getResourceId(R.styleable.ProgressButton_progress_iconfail, R.drawable.ic_fail);        progressText = typedArray.getString(R.styleable.ProgressButton_progress_text);        progressBackgroundImage = typedArray.getDrawable(R.styleable.ProgressButton_progress_button_background);    } finally {        typedArray.recycle();    }    initButton();    initProgressBar();    initImageView();}    private void initButton() {        button = new AppCompatButton(getContext());        LayoutParams button_params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        button_params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);        button.setLayoutParams(button_params);        button.setText(TextUtils.isEmpty(progressText) ? "Button" : progressText);        button.setGravity(Gravity.CENTER);        StateListDrawable background = new StateListDrawable();        background.addState(StateSet.WILD_CARD, progressBackgroundImage);//        background.addState(new int[]{android.R.attr.state_pressed}, progressBackgroundImagePressed);        button.setBackground(background);        button.setClickable(false);    }
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

试试这个对我有用,在 CircleProgressButton 类中添加这个功能:


private void init(){

    setOnClickListener(this);

}

并在所有构造函数上调用 init()。删除这个


@Override

public void setOnClickListener(@Nullable View.OnClickListener l) {

 listener = l;

}

像这样编辑此方法:


@Override

public void onClick(View v) {

    if (imageView.getVisibility() == VISIBLE) imageView.setVisibility(GONE);

    progressBar.setVisibility(VISIBLE);

}

触发按钮onclick


binding.btnSave.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            binding.btnSave.onClick(v);

            Log.i("======", "onSaveClicked: ");

            //code

        }

    });

之后应该可以工作


查看完整回答
反对 回复 2023-05-17
?
绝地无双

TA贡献1946条经验 获得超4个赞

如果你使用数据绑定试试这个


<com.tazik.circleprogressbutton.CircleProgressButton

 android:onClick="@{()->viewModel.click()}"

 .........../>


查看完整回答
反对 回复 2023-05-17
  • 2 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信