J'ai une application qui utilise une barre de support. Je suis une vue personnalisée pour une action.
Le truc est, que les actions par défaut affichent une touche d'outil lorsque je appuie longtemps, mais mon action personnalisée ne le fait pas. p>
Voici donc l'action par défaut (comme vous pouvez le constater, il y a un Conseil à outils):
p>
et voici mon action personnalisée (pas d'outils Pour celui-ci: /):
p>
le XML pour ces 2: P>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto"> <item android:visible="false" android:title="Clear history" android:id="@+id/action_clear_history" custom:showAsAction="always" android:icon="@drawable/ic_action_trash" /> <item android:title="Open chat" android:id="@+id/action_chat" custom:showAsAction="always" custom:actionLayout="@layout/ab_chat" /> </menu>
6 Réponses :
Comme vous utilisez une mise en page personnalisée pour le bouton, le code suivant doit fonctionner:
view.setOnLongClickListener(new OnLongClickListener() { public boolean onLongClick(View view) { Toast toast = Toast.makeText(v.getContext(), "Open chat", Toast.LENGTH_SHORT); toast.show(); return true; } }
Essayez d'ajouter la valeur withText à la fonctionnalité ShowaSaction. Quelque chose comme ça
Utilisez la méthode Un changement de votre peut avoir une erreur ici pour obtenir votre parent MAINTENNE INTENEZ EN Finditem code> sur le menu code> pour obtenir vos vues et définir votre
onlongclicklistener code> sur votre vue.
XML code> fichier de menu Ajouter une ligne
Android: actionviewclass = "android.widget.imagebutton" code> (vous pouvez modifier ce
Voir code>): p>
Voir code> Je pense que cela devrait être la vue principale de la mise en page personnalisée. Vous pouvez tout d'abord utiliser après utilisation
actionviewclass code> p>
OncreateOptionMenu () Code> Pour l'événement de presse à long terme: P>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getSupportMenuInflater().inflate(R.menu.menu_xml, menu);
/*
As per your defined view in XML of MENU
*/
ImageButton view = (ImageButton) menu.findItem(R.id.action_chat).getActionView();
view.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
// TODO Auto-generated method stub
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
Toast toast = Toast.makeText(context, "Open Chat", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP, width - 200, 50); //your width and height
toast.show();
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
Semble un peu hacky. Et pourquoi ai-je besoin Android: actionviewclass code>?
Parce que cela vous aidera à obtenir comme n'importe quel Voir code> pour contrôler votre
Onlongress code> Cliquez sur l'événement.
En fait, vous n'avez pas besoin androidlactionviewclass code> pour y arriver.
menuitem item_chat = menu.finditem (r.id.action_chat); code> fonctionne sans cela. Et puis je peux simplement mettre un
onlongress code> listiers sur la vue action elle-même
Voir item_chat_action_view = menuitemcompat.getactView (item_chat); code>.
J'attendrai encore plus pour voir si quelqu'un propose une réponse plus officielle, car il y a plus à cet outil-pointe que de placer un toast à des coordonnées fixes (la position exacte de l'élément + vibration lorsque l'info-bulle est affichée). Peut-être qu'il y a un appel API pour cela. S'il n'y aura pas de meilleure réponse, j'accepterai le vôtre.
Son bon, pas de problème, mais vous pouvez faire cette vibration avec une image digueable avec sélecteur.
Créer une mise en page personnalisée et définissez cette mise en page sur une barre d'action, j'espère que c'est peut-être fonctionner pour vous et vous implémentez également comme suit ce p>
Salut! Mais que cela a à voir avec l'info-bulle?
Mon week-end est commencé, alors je réponds lundi si cela est possible avec une info-bulle et cette réponse est également une solution pour la question de nous. Essaye ça
Je ne pense pas qu'il y ait des appels d'API "officiels" pour cela. Je crois ajouter un Ce que vous pouvez faire un peu mieux, cependant, calculez correctement la position pour le toast de pointe de l'outil. Je recommanderais simplement de copier et de coller l'extrait pertinent à partir de la classe vue.onclicklistener code> à votre vue personnalisée, car les autres réponses suggèrent, sont à peu près aussi bonnes que possible.
ActionMenuitemView Code> (à partir du code source de la bibliothèque de support) car il traite de quelques cas spéciaux: P>
@Override
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;
}
manière facile et parfait, utilisez simplement android.support.v7.widget.tooltipcompat code>:
Disponible en API 8+ uniquement
Cela devrait être la réponse acceptée. Fonctionne aussi avec androidx.appcompat.widget.tooltipcompat et sur API 26 et plus, nous pourrions simplement faire la vue.SetToolTip ("....")
Vous avez une réponse ou non? @Arthur
Je posterai une mise à jour dès que j'aurai le temps de vérifier cela;) Priorités que vous connaissez: D
Voir ma réponse, c'est facile à mettre en œuvre et son travail ma fin