アクションバーのように機能する画像ボタンを備えたアプリを作成しようとしていますが、長押しでツールチップを表示させることができません。
<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)で機能しますが、長押ししても何も起こりません。
APIレベル26では、組み込みのTooltipTextを使用できます。XML経由:
Android:toolTipText="yourText"
MinSdkが26未満の場合は、 ToolTipCompat を使用します。次に例を示します。
TooltipCompat.setTooltipText(yourView, "your String");
残念ながら、XMLファイルでこれを行う方法はありません。
これは、 Support Library v7 がアクションメニュー項目の「チートシート」を表示するために使用するコードです。
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;
}
正確にはあなたが探しているものではありませんが、それは非常に似たようなことをします。
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)ビューが長押しされたときに呼び出されるコールバックを登録します。ハンドラーは、コンテンツの説明をトーストメッセージとして表示します。
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;
}
});