猿问

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

我创建了一个自定义视图。我的自定义视图扩展自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);

    }


手掌心
浏览 119回答 2
2回答

30秒到达战场

试试这个对我有用,在 CircleProgressButton 类中添加这个功能:private void init(){    setOnClickListener(this);}并在所有构造函数上调用 init()。删除这个@Overridepublic void setOnClickListener(@Nullable View.OnClickListener l) { listener = l;}像这样编辑此方法:@Overridepublic void onClick(View v) {    if (imageView.getVisibility() == VISIBLE) imageView.setVisibility(GONE);    progressBar.setVisibility(VISIBLE);}触发按钮onclickbinding.btnSave.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            binding.btnSave.onClick(v);            Log.i("======", "onSaveClicked: ");            //code        }    });之后应该可以工作

绝地无双

如果你使用数据绑定试试这个<com.tazik.circleprogressbutton.CircleProgressButton&nbsp;android:onClick="@{()->viewModel.click()}"&nbsp;.........../>
随时随地看视频慕课网APP

相关分类

Java
我要回答