android图像按钮工具提示

时间:2014-04-15 15:00:51

标签: android xml tooltip imagebutton

我正在尝试构建一个带有图像按钮的应用程序,其工作方式类似于操作栏,但我无法让它们在长按时显示工具提示。

   <ImageButton
        android:id="@+id/editUrgent"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="48dp"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/editImportant"
        android:hint="@string/hint_urgent"
        android:contentDescription="@string/hint_urgent"
        android:text="@string/hint_urgent"
        android:src="@drawable/clock_light" />

android:contentDescription适用于悬停(s-pen)但长按仍然无效。

4 个答案:

答案 0 :(得分:17)

使用api level 26,您可以使用内置的TooltipText: 通过XML:

android:toolTipText="yourText"

ViewCompatDocs

如果您的minSdk低于26,请使用ToolTipCompat,例如:

TooltipCompat.setTooltipText(yourView, "your String");

不幸的是,在XML文件中无法做到这一点。

答案 1 :(得分:10)

这是Support Library v7用于显示&#34;行动菜单项的备忘单&#34;的代码:

public boolean onLongClick(View v) {
    if (hasText()) {
        // Don't show the cheat sheet for items that already show text.
        return false;
    }

    final int[] screenPos = new int[2];
    final Rect displayFrame = new Rect();
    getLocationOnScreen(screenPos);
    getWindowVisibleDisplayFrame(displayFrame);

    final Context context = getContext();
    final int width = getWidth();
    final int height = getHeight();
    final int midy = screenPos[1] + height / 2;
    int referenceX = screenPos[0] + width / 2;
    if (ViewCompat.getLayoutDirection(v) == ViewCompat.LAYOUT_DIRECTION_LTR) {
        final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
        referenceX = screenWidth - referenceX; // mirror
    }
    Toast cheatSheet = Toast.makeText(context, mItemData.getTitle(), Toast.LENGTH_SHORT);
    if (midy < displayFrame.height()) {
        // Show along the top; follow action buttons
        cheatSheet.setGravity(Gravity.TOP | GravityCompat.END, referenceX, height);
    } else {
        // Show along the bottom center
        cheatSheet.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, height);
    }
    cheatSheet.show();
    return true;
}

答案 2 :(得分:3)

不完全是你想要的,但它做的非常相似。

1)确保您的观看次数为android:longClickable="true"(默认情况下应该是这样)并且具有已定义的内容说明android:contentDescription="@string/myText"

<ImageButton android:id="@+id/button_edit"
     android:contentDescription="@string/myText"
     android:src="@drawable/ic_action_edit"
     android:onClick="onEdit"
     android:longClickable="true"/>

2)注册长按视图时要调用的回调。处理程序将内容描​​述显示为Toast消息。

findViewById(R.id.button_edit).setOnLongClickListener(new View.OnLongClickListener() {

            @Override
            public boolean onLongClick(View view) {
                Toast.makeText(context,view.getContentDescription(), Toast.LENGTH_SHORT).show();
                return true;
            }
        });

答案 3 :(得分:2)

在xml中工作并支持minSdk小于26的解决方案

@BindingAdapter("tooltipTextCompat")
fun bindTooltipText(view: View, tooltipText: String) {
    TooltipCompat.setTooltipText(view, tooltipText)
}

和layout.xml中的用法

app:tooltipTextCompat="@{@string/add_for_all_tooltip}"