首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:为什么长点击会导致后台自动断开?

Android:为什么长点击会导致后台自动断开?
EN

Stack Overflow用户
提问于 2020-08-27 03:05:52
回答 2查看 41关注 0票数 1

我正在尝试实现一个在点击和长点击时临时改变背景的“按钮”。我实现了一个"drawable/selector":

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/key_pressed" />
    <item
        android:drawable="@drawable/key_unpressed" />
</selector>

我还捕获了long-click事件,以将背景更改为其他内容:

代码语言:javascript
复制
@Override
public boolean onLongClick(View view) {
    view.setBackground(getDrawable(R.drawable.key_long_pressed));
    return true;
}

这样做会使背景保持不变,并且不会恢复。如果我注释掉"setBackground()",释放按钮就起作用了。

想法?

我还是想在长点击的时候改变背景。

EN

回答 2

Stack Overflow用户

发布于 2020-08-27 03:51:20

删除此代码

代码语言:javascript
复制
@Override
public boolean onLongClick(View view) {
    view.setBackground(getDrawable(R.drawable.key_long_pressed));
    return true;
}

并将此链接放到XML上的按钮上

代码语言:javascript
复制
android:background="@drawable/key_long_pressed"
票数 0
EN

Stack Overflow用户

发布于 2020-08-27 04:30:07

如果我正确理解了您的意图,那么您希望在用户按下按钮后更改背景,并在用户释放按钮后将其更改回正常状态。要解决此问题,您有两个选项(IMHO):

选项1(简单、快速):

添加使用标准Android机制的涟漪效果。请参阅此问题的答案:Add ripple effect to my button with button background color?

选项2(开销更大,耗时更长,需要编码):

当用户释放按钮时,Android会调用onLongClick(),从而在长点击的末尾。

长点击定义为运动事件ACTION_DOWNACTION_UP之间的时间(可配置),从而按下按钮和释放按钮。因此,你的函数会在ACTION_UP上被调用,并且不会第二次被调用(Android不会在ACTION_DOWN上调用该函数),因此背景颜色不会恢复。

如果你想改变背景,那么你需要在你的代码中实现和设置一个GestureDetector并处理ACTION_DOWNACTION_UP。您可以使用GestureDetector.SimpleOnGestureListener并仅覆盖代码需要的那些运动事件。

GestureDetector.SimpleOnGestureListener.onDown()中,你的代码设置背景,在GestureDetector.SimpleOnGestureListener.onLongPress()中,你的代码还原背景颜色。请注意,此背景更改也会出现在所有其他按钮操作上,因为每个按钮操作都以onDown开头。对于其他操作,您也需要恢复为正常颜色。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63604179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档