Android: การจัดตำแหน่งแนวตั้งสำหรับ EditText หลายบรรทัด (พื้นที่ข้อความ)


232

ฉันต้องการมี 5 บรรทัดสำหรับความสูงของพื้นที่ข้อความ ฉันใช้รหัสต่อไปนี้

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:singleLine="false"
    android:lines="5"
    android:layout_marginLeft="10dip"
    android:layout_marginRight="10dip" />

พื้นที่ข้อความดูดี แต่ปัญหาคือเคอร์เซอร์กะพริบอยู่กลางช่องข้อความ ฉันต้องการให้มันกระพริบที่บรรทัดแรกที่ตัวอักษรตัวแรกของฟิลด์ข้อความ


15
พยายามลบ "แรงโน้มถ่วง" ของคุณออกอาจเป็นปัญหา
Sephy

คำตอบ:



99

นี้จะคล้ายกับคำตอบ CommonsWare แต่มีการปรับแต่งเล็ก ๆ น้อย ๆandroid:gravity="top|start": ตัวอย่างโค้ดแบบสมบูรณ์:

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

8
อย่าใช้top|leftจนกว่าคุณจะรู้ว่าคุณสามารถควบคุมทุกภาษาในแอพของคุณมีภาษาที่อ่านจากขวาไปซ้ายมากมาย ( en.wikipedia.org/wiki/Right-to-left ) ทำให้เป็นภาษาท้องถิ่น
MariusBudin

1
@MariusBudin น่าtop|startจะเป็นทางเลือกที่ถูกต้องหรือไม่
บ้าน

19

คุณสามารถใช้ Edittext นี้ .... สิ่งนี้จะช่วยคุณ

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


6
<EditText android:id="@+id/EditText02" android:layout_width="120dp"
    android:layout_height="wrap_content" android:lines="5" android:layout_centerInParent="true"
    android:gravity="top|left" android:inputType="textMultiLine"
    android:scrollHorizontally="false" android:minWidth="10.0dip"
    android:maxWidth="180dip" />

มันจะทำงาน


3

ตอนนี้การใช้แรงโน้มถ่วงในแต่ละวันstartเป็นตัวเลือกที่ดีที่สุด:

android:gravity="start"

สำหรับ EditText (textarea):

<EditText
    android:id="@+id/EditText02"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:lines="5"
    android:gravity="start"
    android:inputType="textMultiLine"
/>

คุณช่วยอธิบายถึงสาเหตุของการทำงานนี้ได้ไหม ฉันคาดหวังว่าstartจะได้ทำงานเช่นleft(สำหรับภาษาตะวันตก) - กล่าวคือมีผลต่อแรงโน้มถ่วงแนวนอนเท่านั้น แต่ดูเหมือนว่าจะทำงานtopเช่นกัน
บ้าน

ใช่คุณถูก. เราใช้สิ่งนี้เป็นหลักในการสนับสนุน RTL เช่นเดียวกับในภาษาอาหรับมันไปทางขวาแทนที่จะซ้าย และมันก็เป็นไปตามtopที่คุณถามไปแล้ว โดยทั่วไปเราเริ่มเขียนจากด้านบนซ้ายนั่นคือเหตุผลที่สิ่งSTARTนี้แสดงลักษณะเดียวกัน @ ban-geoengineering
Hasib Akter

2

ฉันคิดว่าคุณสามารถใช้layout:weight = 5แทนได้android:lines = 5เพราะเมื่อคุณย้ายแอปของคุณไปยังอุปกรณ์ที่เล็กกว่า - มันทำได้ดีมาก .. ทั้งสองคุณสมบัติจะทำให้งานของคุณสำเร็จ ..

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.