2016-03-30 12 views
3

Ist es möglich, einen EditText editierbar, aber nicht auswählbar zu machen? Ich möchte in der Lage sein, ein bisschen Text zu bearbeiten und dann um die Seite zu ziehen. Es funktioniert, aber während Sie es ziehen, zählt das als ein langer Klick, also wählt es einen Teil des Textes aus.Android EditText - Editierbar, aber nicht auswählbar?

Muss ich etwas tun, das eine andere Ansicht erscheinen lässt, wenn ich auf den EditText klicke, die Berührungsereignisse stattdessen erfassen und dann ausblenden, wenn die Ereignisaktion aktiv ist und den Fokus auf den EditText zurückführe? Das scheint hacky/übermäßig kompliziert.

+0

Haben Sie von Ihrem onLongClick Ereignis in Ihrem Hörer wahr versuchen Rückkehr, so dass die Veranstaltung für die EditText auf den Standard onLongClickListener nicht weiter auf? – zgc7009

+0

Es ist kein langes Klickereignis, es ist ein Berührungsereignis, aber die TextView-Klasse verfügt über einen inhärenten LongClickListener. Ich habe versucht, es für ACTION_DOWN wahr zu geben, aber dann bewegt es nur den Editiertext, und es geht nicht in den Bearbeitungsmodus oder ziehen Sie die Tastatur –

Antwort

0

fand ich eine etwas weniger hacky Lösung als die, die ich oben erwähnt, und versucht dann (und es hat nicht funktioniert), aber dies funktioniert:

dies zuerst tun,

image_text.cancelLongPress(); 

die bricht scheinbar jede geerbt klicken, nicht nur die lange klicken, dh er den Cursor zeigt, und es wählt keinen Text, aber es ist auch nicht die Tastatur bringen, aber das ist einfach:

View v = activity.getWindow().getCurrentFocus(); 
     if (v != null) { 
      InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.showSoftInput(v, 0); 
     } 
0

sollte diese Arbeit: android:textIsSelectable="false"

zweite mögliche Lösung leer onLongClickListener würde zu setzen, die Veranstaltung verbrauchen würde.

OnLongClickListener longClickListener = new OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) {\ 
     return true; //true = event consumed, false = event not consumed 
    } 
}; 
+0

Ich habe dies versucht. Es funktioniert nicht, etwas überschreibt es. Ich habe es in der XML UND programmgesteuert –

0

Vielleicht nicht genau die Lösung, die Sie suchen, aber wenn die EditText an ihren Platz fallen gelassen wird, können Sie sicherzustellen, dass es keine Auswahl durch den Aufruf ist editText.clearFocus();

Dies würde ein Problem sein, wenn Sie behalten erforderlich Auswahl, die vor dem Ziehen vorhanden war, aber nicht, wenn Sie nur sicherstellen wollten, dass die Auswahl gelöscht wurde.

0
EditText myEditText = (EditText) findViewById(R.id.my_edit_text); 
myEditText.setTextIsSelectable(false); 
+0

Könnten Sie Ihre Antwort erklären? – Robert

+0

Ich hätte gedacht, dass es selbsterklärend ist. Sie können es beispielsweise in der onCreate() -Methode Ihrer Aktivität verwenden. Die erste Zeile ruft den EditText auf und die zweite Zeile lässt sie nicht bei langem Drücken auswählbar, obwohl ein Doppeltipp immer noch funktioniert. Der Vorteil gegenüber Vladimirs Vorschlag (Verwendung von android: textIsSelectable = "false" in Ihrem XML) ist, wenn Sie die Eigenschaft ein- und ausschalten können. – eggdeng

+0

die Erklärung ist nicht für mich. Ich empfehle, weil Ihre Antwort als niedrige Qualität gekennzeichnet wurde und Sie können erklären, dass Ihre Antwort besser für jeden ist, der ein Problem wie dieses lösen möchte. – Robert

1

Erreichtes gewünschtes Verhalten unter Verwendung von setTextIsSelectable(false). Der Trick war, zuerst setTextIsSelectable(true) zu laufen. Es überwindet den Fehler/Feature im SDK (debuggen Sie diese Methode, wenn Sie daran interessiert sind). Getestet auf Android 7.1.1.

editText.setTextIsSelectable(true); // needed in order to next line work properly 
editText.setTextIsSelectable(false); 

// restore soft keyboard functionality broken by previous line 
editText.setFocusableInTouchMode(true); 
editText.setFocusable(true); 
editText.setClickable(true);