131 votes

Texte d'édition multiligne avec bouton d'action Terminé

Est-il possible d'avoir un widget EditText avec android:inputType="textMultiLine" défini, et android:imeOptions="actionDone" en même temps ?

Je voudrais une boîte d'édition multiligne, avec le bouton d'action sur le clavier à faire, pas entrer (Carriage Return), mais il ne semble pas fonctionner.

233voto

alexbtr Points 2636

Utiliser

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);

et en XML :

android:inputType="textMultiLine"

27voto

Anees U Points 674

Exemple de travail ! Créez la classe EditText personnalisée ci-dessous qui prend en charge cette fonctionnalité et utilisez la classe dans le fichier xml. Code de travail :

package com.example;

import android.content.Context;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;

public class ActionEditText extends EditText
{
   public ActionEditText(Context context)
   {
       super(context);
   }

   public ActionEditText(Context context, AttributeSet attrs)
   {
       super(context, attrs);
   }

   public ActionEditText(Context context, AttributeSet attrs, int defStyle)
   {
       super(context, attrs, defStyle);
   }

   @Override
   public InputConnection onCreateInputConnection(EditorInfo outAttrs)
   {
       InputConnection conn = super.onCreateInputConnection(outAttrs);
       outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
       return conn;
   }
}

<com.example.ActionEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:imeOptions="actionDone"
       android:inputType="textAutoCorrect|textCapSentences|textMultiLine" />

17voto

Ollie C Points 13789

Pour ce faire dans Kotlin (et aussi éventuellement appliquer d'autres configurations comme textCapSentences, vous pouvez utiliser cette fonction d'extension :

// To use this, do NOT set inputType on the EditText in the layout
fun EditText.setMultiLineCapSentencesAndDoneAction() {
    imeOptions = EditorInfo.IME_ACTION_DONE
    setRawInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or InputType.TYPE_TEXT_FLAG_MULTI_LINE)
}

Utilisation :

myEditText.setMultiLineCapSentencesAndDoneAction()

10voto

Lukap Points 7412

Je pense que c'est comme ça que tu fais. Le fait d'avoir android:inputType="textMultiLine" android:imeOptions="actionDone" rend la saisie des fonctionnalités clés ambiguës. Il suffit de garder à l'esprit que vous pouvez utiliser android:lines="10" et peut-être supprimer android:inputType="textMultiLine", mais dépend de ce que vous voulez atteindre parfois vous avez juste besoin de android:inputType="textMultiLine" et il n'y a pas de remplacement pour cela.

EditText ed=new EditText(this);
ed.setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(keyCode == KeyEvent.KEYCODE_ENTER){
                //do your stuff here
            }
            return false;
        }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X