จะอนุญาตให้มีหลายบรรทัดในEditText
มุมมองของ Android ได้อย่างไร
จะอนุญาตให้มีหลายบรรทัดในEditText
มุมมองของ Android ได้อย่างไร
คำตอบ:
EditText
วิดเจ็ตทั้งหมดใน Android จะมีหลายแถว
นี่คือตัวอย่างรหัสบางส่วน:
<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 -->
/>
inputType
ปฏิเสธอย่างน้อยlines
และminLines
แอตทริบิวต์ ฉันมีinputType="phone"
และคุณสมบัติของเส้นไม่มีผล
IndexOutOfBoundsException
ทันทีที่คุณพิมพ์บางอย่างเนื่องจากandroid:inputType="textMultiLine"
คุณอาจพบว่าใช้ดีกว่า:
<EditText
...
android:inputType="textMultiLine"
/>
นี่เป็นเพราะandroid:singleLine
เลิกใช้แล้ว
singleLine
ส่วนที่คัดค้านคำตอบของพวกเขา (เมื่อนานมาแล้ว) เกี่ยวกับคำถามนั้นเป็นส่วนที่สำคัญที่สุดของคำตอบของพวกเขา
IndexOutOfBoundsException
ทันทีที่คุณพิมพ์บางอย่าง Multiline ตอนนี้เป็นค่าเริ่มต้น
งานนี้สำหรับฉันจริงเหล่านี้ 2 คุณลักษณะที่มีความสำคัญ: inputTypeและสาย นอกจากนี้คุณอาจต้องใช้แถบเลื่อนรหัสด้านล่างแสดงวิธีทำ:
<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" />
นี่คือวิธีที่ฉันใช้ข้อมูลโค้ดด้านล่างและมันใช้ได้ดี หวังว่านี่จะช่วยใครซักคน
<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"
/>
ไชโย! ... ขอบคุณ
ลองสิ่งนี้เพิ่มบรรทัดเหล่านี้ในมุมมองแก้ไขข้อความของคุณฉันจะเพิ่มของฉัน ทำให้แน่ใจว่าคุณเข้าใจ
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"/>
และในคลาส java ของคุณให้คลิก listner ในข้อความแก้ไขนี้ดังนี้ฉันจะเพิ่มชื่อของฉัน
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;
}
});
มันใช้งานได้ดีสำหรับฉัน
EditText มีคุณสมบัติsingleLine คุณสามารถตั้งค่าใน XML หรือโดยการเรียก setSingleLine (false); http://developer.android.com/reference/android/widget/TextView.html#setSingleLine%28%29
ทั้งหมดนี้เป็นสิ่งที่ดี แต่จะไม่ทำงานในกรณีที่คุณมี edittext ของคุณในมุมมองเลื่อนระดับบน :) บางทีตัวอย่างที่พบบ่อยที่สุดคือมุมมอง "การตั้งค่า" ที่มีรายการมากมายที่พวกมันไปไกลกว่าพื้นที่ที่มองเห็น ในกรณีนี้คุณวางทั้งหมดลงในมุมมองเลื่อนเพื่อให้การตั้งค่าเลื่อนได้ ในกรณีที่คุณต้องการข้อความแก้ไขแบบหลายบรรทัดที่เลื่อนได้ในการตั้งค่าการเลื่อนของมันจะไม่ทำงาน
<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
/>
หากต้องการปิดใช้งานจำนวนบรรทัดที่กำหนดไว้ก่อนหน้านี้ในธีมให้ใช้แอตทริบิวต์ xml: android:lines="@null"
android:inputType="textMultiLine"
บรรทัดรหัสนี้ใช้ได้สำหรับฉัน เพิ่มรหัสนี้คุณ edittext ในไฟล์ xml ของคุณ
เพียงเพิ่มandroid:inputType="textMultiLine"
ไฟล์นี้
ในไฟล์ XML ในฟิลด์ที่เกี่ยวข้อง
ฉันได้เรียนรู้สิ่งนี้จากhttp://www.pcsalt.com/android/edittext-with-single-line-line-wrapping-and-done-action-in-android/แม้ว่าฉันจะไม่ชอบเว็บไซต์ของตัวเอง หากคุณต้องการหลายบรรทัด แต่ต้องการเก็บปุ่ม Enter เป็นปุ่มโพสต์ให้ตั้งค่า "การเลื่อนตามแนวนอน" ของ listview เป็น false
android:scrollHorizontally="false"
ถ้ามันใช้งานไม่ได้ใน xml การทำมันใช้งานได้โดยทางโปรแกรม
listView.setHorizontallyScrolling(false);
<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" />
และในกิจกรรมเพื่อลบ "\ n" คือผู้ใช้กดบรรทัดถัดไป
String editStr= edittxtAddress.getText().toString().trim();
MyString= editStr.replaceAll("\n"," ");
หากมีผู้ใช้AppCompatEditText อยู่แล้วคุณต้องตั้งค่าinputType = "textMultiLine"ที่นี่คือรหัสที่คุณสามารถคัดลอกได้
<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"
/>
สำหรับพื้นหลัง
<?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>
อีกสิ่งที่เรียบร้อยที่จะทำคือการใช้พร้อมกับandroid:minHeight
android:layout_height="wrap_content"
วิธีนี้คุณสามารถกำหนดขนาดของการแก้ไขเมื่อไม่มีข้อมูลและเมื่อผู้ใช้ป้อนข้อมูลสิ่งนั้นจะยืดตามจำนวนผู้ใช้ที่ป้อนรวมถึงหลายบรรทัด