Je suis faire une verticale EditText
traditionnelle mongole. J'ai mis en œuvre avec succès par l'incorporation d'un peu modifié EditText
à l'intérieur d'une zone de ViewGroup
. J'ai besoin de créer un tout menu contextuel personnalisé parce que le système ne prend pas en charge le texte vertical et est également de ne pas faire pivoter lorsque l' ViewGroup
est en rotation. Je tiens donc à désactiver le système de menu de contexte tout à fait.
Notez que ceci est différent de ces questions qui sont juste essayer de désactiver le copier/coller, etc.:
- Comment faire pour désactiver le copier/coller depuis/vers EditText
- EditText: Désactiver Coller/Remplacer le menu pop-up sur la Sélection de Texte, Gestionnaire d'événement click
- comment faire pour désactiver l'option coller dans android EditText
- Android: Comment faire pour désactiver TOTALEMENT copiez et collez fonction dans l'Edittext
Bien que je n'ai pas le menu contextuel apparaissant dans le simulateur, je reçois il apparaît dans mon Android 5.0.2 Xiaomi téléphone.
J'ai essayé:
- l'
setCustomSelectionActionModeCallback
"solution" - l'
setLongClickable(false);
"solution" - l'
onTouchEvent
"solution"
Je suis ouvert à des hacks, mais j'en ai besoin pour travailler à travers les dispositifs. Mark Murphy (une des Communes du Gars) a écrit il y a quelque temps en réponse à un autre utilisateur essaie de faire quelque chose de similaire:
Je pense que même si vous avez une réponse, il ne fonctionnera pas à travers les dispositifs. Les fabricants d'appareils ont eu tendance à rouler leurs propre "menu contextuel" pour EditText, en battant des développeurs tente d'ajouter les éléments dans le menu contextuel. Ma conjecture est que d'essayer d'empêcher que le menu contextuel avoir des résultats similaires.
Suis-je de la chance?
La seule chose que je peux penser maintenant est de réécrire complètement TextView
et EditText
à partir de zéro (ainsi, en modifiant la source Android). Je connais quelqu'un qui fait quelque chose de similaire, mais son code n'est pas open source. Avant de prendre cette étape importante, je veux essayer de demander pour une solution plus simple ici, sur un Débordement de Pile.
Mise à jour: j'ai essayé de modifier l' TextView
code source pour les deux derniers jours et il ressemble à 6 mois de projet. C'est une masse de l'interdépendance des classes. J'ai besoin d'une autre solution, mais je suis à court d'idées.
MVCE
C'est le moyen le plus simple je pense de recréer le problème. Il n'y a rien de nécessaire à partir de mon personnalisée EditText
. A la mise en page d'un seul EditText
faites en remplaçant la valeur par défaut du projet Bonjour du Monde TextView
. J'ai changé le min de l'API à 11 pour éviter de traiter avec des méthodes obsolètes.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = (EditText) findViewById(R.id.edit_text);
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { return false; }
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; }
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { return false; }
@Override
public void onDestroyActionMode(ActionMode actionMode) { }
});
}
}
Le menu contextuel dans le simulateur (en exécution de l'API 24) montre encore quand je clique sur le curseur de la manche (mais pas sur une longue cliquez ou double-cliquez). Voici une image:
Sur mon Xiaomi MIUI téléphone fonctionnant sous Android 5.0, je obtenir le menu contextuel dans toutes les situations (curseur poignée de clic, clic, double clic).
Mise à jour
Aritra Roy solution est de travailler dans le simulateur, sur certains autres appareils qu'il a testé, et sur mon appareil. J'ai accepté sa réponse, car il résout mon problème d'origine. Le seul effet secondaire est que la sélection de texte est également désactivée.