android - 带有 clickable = "false" 的 ImageButton 仍然可以点击
问题描述
我使用 ImageButton 拨打电话,但在我点击 showPhoneNumberBtn ImageButton 之前它不应该是可点击的。
ImageButton showPhoneNumberBtn = root.findViewById(R.id.showPhoneNumberBtn);
showPhoneNumberBtn.setOnClickListener(new View.OnClickListener() {
@SuppressLint("ResourceAsColor")
@Override
public void onClick(View v) {
TextView phoneNumber = root.findViewById(R.id.phoneNumberText);
phoneNumber.setText(currentUser.getPhoneNumber());
ImageButton makeCallBtn = root.findViewById(R.id.makeCallBtn);
makeCallBtn.setClickable(true);
Drawable img = getContext().getDrawable(R.drawable.ic_call_black_24dp);
img.setTint(Color.parseColor("#3CB371"));
makeCallBtn.setBackground(img);
}
});
ImageButton makeCallBtn = root.findViewById(R.id.makeCallBtn);
makeCallBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CALL_PHONE}, 1);
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(callIntent);
} else {
Toast.makeText(getContext(), "You don't assign permission.", Toast.LENGTH_SHORT).show();
}
}
});
解决方案
使用setOnClickListener
会将可点击状态重置为真。您需要立即将其设置为 false 。
从源代码:
public void setOnClickListener(OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
可以在这里找到详细的解释。
推荐阅读
- ruby-on-rails - 如何从 Rspec Mock 返回 2 个值?
- node.js - nodemailer 在使用 SMTP 时获得 EACCES
- azure-functions - Azure 函数在手动运行时出错,但按计划正常工作
- neo4j - 3.5.1 error can't get just created node by id
- mysql - MySQL - 如果 ID 和时间戳在时间范围内唯一的组合约束,则防止插入记录
- ibm-midrange - 如何在 COBOL 程序中使用 PROGRAM STATUS 子句
- python - 抓取不完整的html
- python - Python dylib 在 Mac 中的 python 本身的位置
- python - 修复 Pygame 玩家输入响应时间
- html - 在 MVC 中使用 @Url.Content 从网页发布图像时出错