2014-04-15 9 views
8

Ich versuche eine App mit Bildschaltflächen zu erstellen, die wie die Aktionsleiste funktionieren, aber ich kann sie nicht dazu bringen, einen Tooltip auf lange drücken zu zeigen.android image button tooltip

android: contentDescription funktioniert für Schweben (s-Stift) aber lange drücken tut noch nichts.

+1

Check-out-Kontextmenü-Option für diese Funktion auf lange drücken - http://www.thegeekstuff.com/2013/12/android-app-menus/ –

Antwort

3

Nicht genau, was Sie suchen, aber es tut etwas sehr ähnliches.

1) Versichern Sie Ihre Ansicht ist android:longClickable="true" (standardmäßig sein soll) und hat eine definierten Inhaltsbeschreibung 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) einen Rückruf registriert aufgerufen werden, wenn die Ansicht lang gedrückt wird. Handler zeigt die Inhaltsbeschreibung als Toast-Nachricht an.

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; 
      } 
     }); 
+0

Dies ist nicht Ideal, da es den Tooltip nicht anzeigt, wo der Lang-Klick gemacht wurde, aber es wird in der Standard-Toast-Nachrichten-Position (??) angezeigt. –

10

Dies ist der Code, dass Support Library v7 verwendet um zu zeigen, "Spickzettel" s Handlungsmenüpunkte:

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; 
} 
5

Mit api Level 26 Sie den eingebauten TooltipText verwenden können: XML:

android:toolTipText="yourText" 

ViewCompatDocs

Für ältere api l evels verwendet ToolTipCompat, zum Beispiel:

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