EditText ที่เพิ่มไม่ใช่ TextInputEditText โปรดเปลี่ยนไปใช้คลาสนั้นแทน


96

ฉันใช้EditTextภายใน a TextInputLayoutแต่หลังจากอัปเกรดไลบรารีการสนับสนุนเป็น 23.2.0 ฉันได้รับคำเตือนนี้ใน logcat ความแตกต่างระหว่างปกติEditTextกับ a TextInputEditTextคืออะไร? ฉันไม่พบเอกสารประกอบใด ๆ


ฉันได้อัปเกรดไลบรารีการสนับสนุนของฉันเป็น 23.2.1 แต่ยังไม่สามารถแก้ไข TextInputEditText ในรหัสของฉันได้ คุณแก้ไขได้อย่างไร
Edijae Crusar

คำตอบ:


111

ฉันก็สงสัยเช่นกันDaniel Wilsonรวบรวมเอกสาร แต่สำหรับสายตาที่ไม่ได้รับการฝึกฝนมันไม่ได้มีความหมายอะไรมาก นี่คือข้อมูลทั้งหมด: "โหมดแยก"หมายถึงประเภทของมุมมองที่แสดงเมื่อมีพื้นที่น้อยเกินไปเช่นแนวนอนบนโทรศัพท์ ฉันใช้ Galaxy S4 กับแป้นพิมพ์ของ Google เป็นตัวแก้ไขวิธีการป้อนข้อมูล (IME)

UI แนวนอนที่ไม่มี IME ที่มองเห็นได้

ขึ้นอยู่กับโฟกัส (ในคำอธิบาย) คุณสามารถเห็นTextInputLayoutการดำเนินการผลักคำใบ้ออกนอกตัวแก้ไข ที่นี่ไม่มีอะไรพิเศษนี่คือสิ่งที่TextInputLayoutควรทำ

UI แนวนอนที่ไม่มี IME ที่มองเห็นได้

การแก้ไข UI แนวนอนฟิลด์ชื่อว่าง

การแก้ไขชื่อคุณจะเห็นว่า IME ไม่ได้ให้คำแนะนำเกี่ยวกับสิ่งที่คุณกำลังแก้ไข

การแก้ไข UI แนวนอนฟิลด์ชื่อว่าง

ฟิลด์คำอธิบายการแก้ไข UI แนวนอนว่างเปล่า

การแก้ไขคำอธิบายคุณจะเห็นว่า IME ให้คำแนะนำเกี่ยวกับสิ่งที่คุณกำลังแก้ไข

ฟิลด์คำอธิบายการแก้ไข UI แนวนอนว่างเปล่า

XML ของเค้าโครง

ความแตกต่างระหว่างสองช่องคือประเภทของพวกเขาVSEditText TextInputEditTextสิ่งสำคัญที่นี่คือTextInputLayoutมีandroid:hintและไม่มี EditText แบบห่อซึ่งเป็นกรณีที่TextInputEditTextโค้ด Java ไม่กี่บรรทัดสร้างความแตกต่างอย่างมาก

ฟิลด์ชื่อ

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Name"
    >
    <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</android.support.design.widget.TextInputLayout>

ฟิลด์คำอธิบาย

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Description"
    >
    <android.support.design.widget.TextInputEditText
        android:id="@+id/description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:minLines="4"
        android:scrollbars="vertical"
        />
</android.support.design.widget.TextInputLayout>

3
ฉันได้อัปเกรดไลบรารีการสนับสนุนของฉันเป็น 23.2.1 แล้ว แต่ยังไม่สามารถแก้ไข TextInputEditText ในรหัส คุณแก้ไขได้อย่างไร
Edijae Crusar

คุณมีไลบรารีการออกแบบด้วยหรือไม่? สิ่งนี้ไม่ได้อยู่ในการสนับสนุน
TWiStErRob

1
ทราบอย่างรวดเร็ว: ตามเอกสารที่android:hintสถานที่ให้บริการควรจะไปในแทนTextInputEditText TextInputLayout
DriesOeyen

1
@luxsypher ฉันวางมันลงและใช้วิธีอื่นซึ่งวาง EditText ใน TextInputLayout
Edijae Crusar

1
@ jeet.chanchawat เป็น upcast จึงปลอดภัย คุณควรใช้ประเภททั่วไปที่สุดที่ให้ฟังก์ชัน (= API) ที่จำเป็น การใช้TextInputEditTextเป็นรายละเอียดการใช้งานของ UI
TWiStErRob

35

ไม่มีเอกสารประกอบ แต่คลาสนี้เป็นคลาสปกติที่EditTextมีคุณสมบัติพิเศษเดียว:

การใช้คลาสนี้ทำให้เราสามารถแสดงคำใบ้ใน IME เมื่ออยู่ในโหมด 'แยก'

โดยเฉพาะจะตั้งค่าEditorInfo.hintText. คุณจะสังเกตเห็นในTextInputLayoutชั้นเรียนคุณสามารถระบุคำใบ้และลักษณะที่ปรากฏแทนที่จะเป็นส่วนหนึ่งของEditTextวิดเจ็ตลูก

หากคุณจำเป็นต้องทำเช่นนั้นคุณควรใช้TextInputEditTextดังนั้นให้ความสำคัญกับข้อมูลคำใบ้ที่คุณระบุไว้ในไฟล์TextInputLayout.


2
ตัวอย่างใด ฉันไม่รู้ว่าคุณกำลังแนะนำอะไร
behelit

4

โดยพื้นฐานแล้วมันเป็นสิ่งเดียวกัน แต่ฉันคิดว่ามันTextInputEditTextมีคุณสมบัติมากกว่าและอาจเป็นคุณสมบัติ ฉันเปลี่ยนเป็นTextInputEditTextและทุกอย่างใช้งานได้และดูเป็นไปตามมาตรฐานก่อนหน้าEditTextนี้


ฉันใช้ TextInputLayout อยู่แล้วฉันกำลังถามเกี่ยวกับทางเลือกสำหรับ EditText ที่เรียกว่า TextInputEditText
Silvia H

ขออภัยฉันกำลังพูดถึง TextInputEditText แต่บอกว่าเค้าโครง ฉันแก้ไขคำตอบ
Nick Mowen

0

ข้อแตกต่างเพียงอย่างเดียวคือเมื่ออุปกรณ์ของคุณอยู่ในโหมดแนวนอนTextInputEditTextจะแสดงคำใบ้EditTextจะไม่


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