2010-11-15 34 views
6

Est-il possible d'ajouter quelque chose à la liste des éléments affichés lorsqu'un utilisateur appuie longuement sur un texte d'édition? (Couper, copier coller, sélectionner du texte, sélectionner tout, méthode de saisie) Je veux ajouter une option à cela qui va scanner un code QR et coller le résultat dans le texte d'édition. Je pense que ce ne serait pas très difficile d'obtenir ce comportement des textes d'édition que j'ai mis dans ma propre application, mais je veux ajouter cette option à n'importe quel texte d'édition dans n'importe quelle application sur mon téléphone. Est-ce que quelque chose comme cela est possible, si oui, quelqu'un peut-il me pointer dans la bonne direction?Android Appui long sur le comportement Modifier le texte

Éditer 150 bounty: Je cherche à ajouter un élément dans la boîte de dialogue contextuelle EditText quand il est appuyé longuement. Je veux chercher un moyen de rendre ce système de changement large, pas seulement dans le contexte de 1 application.

+0

avez-vous déjà découvert comment faire ce système? J'essaie de comprendre comment le faire avec peu de succès. – Silvae

+3

Non, jamais rencontré un chemin. La meilleure idée que j'ai eu était de créer une application de remplacement de clavier qui pourrait avoir un bouton de numérisation dessus. – FoamyGuy

Répondre

5

Cest pas possible, comme le menu contextuel est peuplé par les applications elles-mêmes et pas par le système. Vous ne pouvez pas forcer d'autres applications à avoir un élément de contexte qu'elles pourraient ne pas utiliser au cours de leur vie. Vous pouvez au moins avoir cette fonctionnalité dans les applications qui connaissent votre application.

Créez une activité qui remplit et gère uniquement vos éléments de menu globaux. D'autres applications peuvent utiliser la fonctionnalité en prolongeant votre activité. Mais cela aussi va créer des problèmes, car les autres applications auront une forte dépendance à votre application. Donc, si votre application n'est pas installée dans ce système, l'autre application ne fonctionnera pas. De même, il n'y a aucun moyen d'indiquer cette dépendance dans le fichier manifeste afin que l'application dépendante soit cachée sur le marché si votre application n'est pas déjà installée.

Je suis sûr que ce n'est pas la réponse que vous recherchiez, mais les menus contextuels sont conçus de façon artisanale.

1

Oui, il est possible d'ajouter quelque chose à la liste des éléments sur LongClick de EditText.

Pour vous mettre dans la bonne direction, je poste des extraits de code.

En main.xml faire quelque chose comme

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
> 

<EditText 
       android:id="@+id/textt" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/hello" 
/> 

</LinearLayout> 

Après cela dans votre activité principale, faire quelque chose comme

public class edit extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    EditText text = (EditText)this.findViewById(R.id.textt); 
    text.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 

      //ADD HERE ABOUT CUT COPY PASTE 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 
} 
} 

Hope it helps

3

Il y a 2 façons: 1er celle décrite par Shahab. Le 2ème est plus simple. Vous devez simplement remplacer la méthode standard de votre activité, comme:

@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) 
{ 
     if(view.getId()==R.id.MyEditTextId) 
     { 
      menu.add(Menu.NONE, MyMenu, Menu.NONE, R.string.MyMenuText); 
     } 
     else 
      super.onCreateContextMenu(menu, view, menuInfo); 
} 

Après que vous aurez Appui long sur le menu contextuel pop-up

+0

Je pense que c'est plus proche de ce que je cherche. Mais je ne cherche pas à faire ce travail dans l'une de mes applications. Je veux que ce soit le système à chaque fois que j'appuie longuement sur n'importe quel texte d'édition dans n'importe quelle application, je veux ajouter une option au menu qui apparaît. Est-il possible de faire quelque chose comme ce système? – FoamyGuy

+0

Ce n'est pas possible, car le menu contextuel est rempli par les applications elles-mêmes et non par le système. Vous ne pouvez pas forcer les autres applications à avoir un élément de contexte dont ils n'ont pas besoin. Vous pouvez au moins avoir cette fonctionnalité dans les applications qui connaissent votre application. créer une bibliothèque avec une activité qui remplit vos éléments de menu. D'autres applications peuvent utiliser la fonctionnalité en prolongeant votre activité. – Ronnie

+0

@ userSeven7s: Je dirais.Si vous avez une activité racine qui est parent pour toutes les activités de l'application - vous pouvez remplacer onCreatContextMenu d'une manière que j'ai décrite ci-dessus - donc chaque fois que l'utilisateur appuie longuement sur le menu contextuel, hein? – barmaley