Mehrzeilig in der EditText-Ansicht in Android zulassen?


Antworten:


1176

Standardmäßig sind alle EditTextWidgets in Android mehrzeilig.

Hier ist ein Beispielcode:

<EditText
    android:inputType="textMultiLine" <!-- Multiline input -->
    android:lines="8" <!-- Total Lines prior display -->
    android:minLines="6" <!-- Minimum lines -->
    android:gravity="top|left" <!-- Cursor Position -->
    android:maxLines="10" <!-- Maximum Lines -->
    android:layout_height="wrap_content" <!-- Height determined by content -->
    android:layout_width="match_parent" <!-- Fill entire width -->
    android:scrollbars="vertical" <!-- Vertical Scroll Bar -->
/>

6
Gibt es eine Möglichkeit, inputType auf textMultiLine und imeOptions auf actionSend zu setzen? Ich sehe eine Eingabetaste auf der S4-Tastatur anstatt zu senden, wenn ich inputType auf textMultiLine und imeOptions auf actionSend setze.
user484691

1
Für "textMultiLine und imeOptions" siehe stackoverflow.com/questions/5014219/…
TOMKA

2
Eine Sache zu beachten, das Hinzufügen eines inputTypenegiert mindestens die linesund minLinesAttribute. Ich hatte inputType="phone"und die Linien Attribute hatte keine Wirkung
ono

2
Verwenden Sie dies nicht. Verursacht eine IndexOutOfBoundsException, sobald Sie etwas android:inputType="textMultiLine"
eingeben

Wenn Sie AppCompactTextView verwenden, benötigen Sie diese Zeile android: inputType = "textMultiLine"
sourav pandit

260

Möglicherweise finden Sie es besser zu verwenden:

<EditText 
...
android:inputType="textMultiLine"
/>

Dies liegt daran, dass android:singleLineveraltet ist.


Sharduls Antwort sollte auf jeden Fall auf modernen Apis funktionieren. Da sie den veralteten singleLineTeil ihrer Antwort entfernt haben (vor langer Zeit). In Bezug auf die Frage selbst ist dies der wichtigste Teil ihrer Antwort.
Knossos

Verwenden Sie dies nicht. Verursacht eine IndexOutOfBoundsException, sobald Sie etwas eingeben. Multiline ist jetzt die Standardeinstellung.
Chisko

@Chisko Ein XML-Attribut würde keine IndexOutOfBoundsException verursachen. Ich kann mich nicht erinnern, wann sich der Standardeingabetyp geändert hat (hat er es sogar getan?), Aber es ist wahrscheinlich aus Gründen der Abwärtskompatibilität am besten, dies beizubehalten.
Knossos

1
@ Knossos gut, so seltsam es für dich ist, ist es für mich. Ich habe den Code buchstäblich kopiert und jedes Mal mit jeder möglichen Kombination mehrerer Parameter abgestürzt, bis ich ihn entfernt habe. Stelle dir das vor.
Chisko

42

Das funktioniert bei mir, eigentlich sind diese 2 Attribute wichtig: inputType und lines . Außerdem benötigen Sie möglicherweise eine Bildlaufleiste. Der folgende Code zeigt, wie Sie eine erstellen:

 <EditText
        android:id="@+id/addr_edittext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="top|left"
        android:inputType="textEmailAddress|textMultiLine"
        android:lines="20"
        android:minLines="5"
        android:scrollHorizontally="false"
        android:scrollbars="vertical" />

20

So habe ich das folgende Code-Snippet angewendet und es funktioniert einwandfrei. Hoffe, das würde jemandem helfen.

<EditText 
    android:id="@+id/EditText02"
    android:gravity="top|left" 
    android:inputType="textMultiLine"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:lines="5" 
    android:scrollHorizontally="false" 
/>

Prost! ...Vielen Dank.


11

Versuchen Sie dies, fügen Sie diese Zeilen zu Ihrer Textansicht hinzu, ich werde meine hinzufügen. Stellen Sie sicher, dass Sie es verstehen

android:overScrollMode="always"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"

<EditText
    android:inputType="textMultiLine"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editText_newprom_description"
    android:padding="10dp"
    android:lines="5"
    android:overScrollMode="always"
    android:scrollbarStyle="insideInset"
    android:minLines="5"
    android:gravity="top|left"
    android:scrollbars="vertical"
    android:layout_marginBottom="20dp"/>

und auf Ihrer Java-Klasse machen Sie auf Klicklistener zu diesem Bearbeitungstext wie folgt, ich füge meine, chane Namen entsprechend Ihren hinzu.

EditText description;
description = (EditText)findViewById(R.id.editText_newprom_description);

description.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                view.getParent().requestDisallowInterceptTouchEvent(true);
                switch (motionEvent.getAction() & MotionEvent.ACTION_MASK){
                    case MotionEvent.ACTION_UP:
                        view.getParent().requestDisallowInterceptTouchEvent(false);
                        break;
                }

                return false;
            }

        });

Das funktioniert gut für mich


Danke! Auf diese Weise habe ich einen Bearbeitungstext in einer scrollbaren Ansicht scrollbar gemacht.
Esdras Lopez


5

Alle diese sind nett, funktionieren aber nicht, wenn Sie Ihren Edittext in der Bildlaufansicht der oberen Ebene haben :) Das vielleicht häufigste Beispiel ist die Ansicht "Einstellungen", die so viele Elemente enthält, dass sie über den sichtbaren Bereich hinausgehen. In diesem Fall setzen Sie sie alle in die Bildlaufansicht, um die Einstellungen scrollbar zu machen. Falls Sie in Ihren Einstellungen mehrzeiligen, scrollbaren Bearbeitungstext benötigen, funktioniert der Bildlauf nicht.


5
 <EditText
           android:id="@id/editText" //id of editText
           android:gravity="start"   // Where to start Typing
           android:inputType="textMultiLine" // multiline
           android:imeOptions="actionDone" // Keyboard done button
           android:minLines="5" // Min Line of editText
           android:hint="@string/Enter Data" // Hint in editText
           android:layout_width="match_parent" //width editText
           android:layout_height="wrap_content" //height editText
           /> 

4

Verwenden Sie das XML-Attribut, um die Anzahl der Zeilen zu deaktivieren, die zuvor im Thema zugewiesen wurden: android:lines="@null"


4
android:inputType="textMultiLine"

Diese Codezeile funktioniert für mich. Fügen Sie diesen Code, den Sie bearbeitet haben, in Ihre XML-Datei ein.


3

Fügen Sie dies einfach android:inputType="textMultiLine" in der XML-Datei in das entsprechende Feld ein.


1

Ich habe dies von http://www.pcsalt.com/android/edittext-with-single-line-line-wrapping-and-done-action-in-android/ gelernt , obwohl mir die Website selbst nicht gefällt. Wenn Sie mehrzeilig sein möchten, ABER die Eingabetaste als Post-Schaltfläche beibehalten möchten, setzen Sie das "horizontale Scrollen" der Listenansicht auf "false".

android:scrollHorizontally="false"

Wenn es in XML nicht funktioniert, funktioniert es programmgesteuert seltsam.

listView.setHorizontallyScrolling(false);


1
<EditText
                android:hint="Address"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:inputType="textMultiLine|textNoSuggestions"
                android:id="@+id/edittxtAddress"
                android:layout_marginLeft="@dimen/textsize2"
                android:textColor="@android:color/white"
                android:scrollbars="vertical"
                android:minLines="2"
            android:textStyle="normal" />

und in Aktivität zum Entfernen von "\ n" drückt der Benutzer auf die nächste Zeile

String editStr= edittxtAddress.getText().toString().trim();

 MyString= editStr.replaceAll("\n"," ");

1

Wenn jemand AppCompatEditText verwendet , müssen Sie inputType = "textMultiLine" setzen. Hier ist der Code, den Sie kopieren können


   <androidx.appcompat.widget.AppCompatEditText
        android:padding="@dimen/_8sdp"
        android:id="@+id/etNote"
        android:minLines="6"
        android:singleLine="false"
        android:lines="8"
        android:scrollbars="vertical"
        android:background="@drawable/rounded_border"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/_25sdp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="@dimen/_25sdp"
        android:autofillHints=""

        android:gravity="start|top"
        android:inputType="textMultiLine"
         />

für den Hintergrund

   <?xml version="1.0" encoding="utf-8"?>
   <shape android:shape="rectangle" 
    xmlns:android="http://schemas.android.com/apk/res/android">
   <corners android:radius="@dimen/_5sdp"/>
   <stroke android:width="1dp" android:color="#C8C8C8"/>
   </shape>

0

Eine andere nette Sache zu tun ist, android:minHeightzusammen mit zu verwenden android:layout_height="wrap_content". Auf diese Weise können Sie die Größe der Bearbeitung festlegen, wenn sie leer ist, und wenn der Benutzer Inhalte eingibt, wird sie entsprechend der Eingabe durch den Benutzer, einschließlich mehrerer Zeilen, gedehnt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.