Vraag Voorkom invoertoets op EditText, maar toon de tekst nog steeds als multi-regel


Hoe maak ik een bewerkingstekst op Android zodat de gebruiker geen tekst met meerdere regels invoert, maar het scherm is nog steeds uit meerdere regels (dat wil zeggen, er is woordomslag in plaats van de tekst die naar rechts gaat)?

Het is vergelijkbaar met de ingebouwde SMS-toepassing, waar we geen nieuwe regels kunnen invoeren, maar de tekst wordt weergegeven in meerdere regels.


60
2018-05-20 10:48


oorsprong


antwoorden:


Ik zou de widget subclasseren en de belangrijkste gebeurtenisbehandeling opheffen om het te blokkeren Enter sleutel:

class MyTextView extends EditText
{
    ...
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode==KeyEvent.KEYCODE_ENTER) 
        {
            // Just ignore the [Enter] key
            return true;
        }
        // Handle all other keys in the default way
        return super.onKeyDown(keyCode, event);
    }
}

44
2018-05-20 10:53



Dit is een methode waarbij u de klasse EditText niet hoeft te overschrijven. Je pakt en vervangt gewoon de nieuwe regels door lege reeksen.

myEditTextObject.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    public void afterTextChanged(Editable s) {

        for(int i = s.length(); i > 0; i--) {

            if(s.subSequence(i-1, i).toString().equals("\n"))
                s.replace(i-1, i, "");
        }

        String myTextString = s.toString();
    }
});

38
2018-05-25 09:37




Eigenschap in XML

android:lines="5"
android:inputType="textPersonName"

24
2017-07-03 08:23



Deze werkt voor mij:

<EditText
    android:inputType="textShortMessage|textMultiLine"
    android:minLines="3"
    ... />

Het toont een smiley in plaats van de Enter-toets.


14
2018-02-11 14:47



Ik test dit en het lijkt te werken:

EditText editText = new EditText(context);
editText.setSingleLine(false);
editText.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT);

5
2017-11-07 21:53



Probeer dit:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_ENTER)
    {
        //Nothing
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

5
2018-05-20 10:55



Het antwoord van @Andreas Rudolph bevat een kritieke bug en mag niet worden gebruikt. De code veroorzaakt een IndexOutOfBoundsException wanneer je tekst binnen de EditText die meerdere nieuwe-regel tekens bevat. Dit wordt veroorzaakt door het type lus dat wordt gebruikt, de Editable object zal de afterTextChanged methode zodra de inhoud ervan verandert (vervangen, verwijderen, invoegen).

Juiste code:

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    public void afterTextChanged(Editable s) {
        /*
         * The loop is in reverse for a purpose,
         * each replace or delete call on the Editable will cause
         * the afterTextChanged method to be called again.
         * Hence the return statement after the first removal.
         * http://developer.android.com/reference/android/text/TextWatcher.html#afterTextChanged(android.text.Editable)
         */
        for(int i = s.length()-1; i >= 0; i--){
            if(s.charAt(i) == '\n'){
                s.delete(i, i + 1);
                return;
            }
        }
    }
});

5
2018-04-07 19:18



Gewoon toevoegen

        android:singleLine="true"

naar uw bewerkingstekst


4
2018-01-18 14:24



Je kunt het zo instellen vanuit de xml:

android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="10"

vergeet het niet android:inputType="text", als u het niet instelt, werkt het niet. Ik weet echter niet waarom. Vergeet ook niet te veranderen maxLines naar de gewenste waarde.


3
2017-07-03 12:04