停止 ImageButton 工具提示出现在通过片段悬停时

Posted

技术标签:

【中文标题】停止 ImageButton 工具提示出现在通过片段悬停时【英文标题】:Stop ImageButton tooltip from appearing on hover through a fragment 【发布时间】:2020-12-06 23:56:49 【问题描述】:

目前我观察到“通过”片段显示工具提示的奇怪行为,但我不知道如何摆脱它。任何想法或提示将不胜感激!

我有一个ImageButton 和一些contentDescription

        <androidx.appcompat.widget.AppCompatImageButton
            android:layout_
            android:layout_
            android:contentDescription="Content description"
            android:src="@drawable/ic_image"
            />

这样做是为了让用户在将触控笔/S-Pen 或鼠标指针悬停在图像上时看到帮助文本。这是一种期望的行为:

AlertDialog 显示在活动上方时,不会显示任何工具提示。这也是一种预期行为:

但是,当片段显示在ImageButton 上时,总是会显示工具提示。这是一个不受欢迎的行为,也是这个问题的一大奥秘。该片段具有半透明的绿色背景:

片段布局中使用了一个简单的FrameLayout

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout1"
    android:layout_
    android:layout_
    android:background="#B94EC14A"
    />

用户可以点击片段。

如果添加这些行,可以摆脱“点击”行为,但不能摆脱“悬停”:

        layout1.setClickable(true);
        layout1.setFocusable(true);

        layout1.setOnTouchListener((v, event) -> true);
        layout1.setOnHoverListener((v, event) -> true);
        layout1.setOnGenericMotionListener((v, event) -> true);

这里似乎使用了其他类型的事件。

哪种事件用于通过视图翻译“悬停”事件? 如何防止出现此工具提示? (需要与 AlertDialog 类似的行为)

【问题讨论】:

【参考方案1】:

很遗憾,我找不到问题的原因,所以我最终将片段作为对话框启动:

MyFragment fragment = new MyFragment();
...
fragment.setArguments(bundle);
fragment.setCancelable(false);
fragment.show(getSupportFragmentManager(), "dialog");

或者对于不同的用例将片段打包到一个空的活动中并启动这个活动:

Intent intent = new Intent(this, MyActivity.class);
intent.putExtra(...);
startActivityForResult(intent, REQUEST_CODE);

在这种情况下(如问题中所述),工具提示不会在悬停时显示。

【讨论】:

以上是关于停止 ImageButton 工具提示出现在通过片段悬停时的主要内容,如果未能解决你的问题,请参考以下文章

在一个seflmade工具栏中使用onClick的ImageButton

工具提示停止 mouseMoveEvent

鼠标停止时如何显示气球工具提示

android里为ImageButton设置图片出现混乱

用微信打开链接提示“已停止访问该网页”可以用MaxJump来解除限制。

用微信打开链接提示“已停止访问该网页”可以用MaxJump来解除限制。