ฉันต้องการสิ่งEditText
ที่ดูเหมือนว่าข้อผิดพลาดนี้:
การเรียกใช้ onError มีลักษณะเช่นนี้แทน:
หมายเหตุ: แอปทำงานบน SDK 19 (4.4.2)
min SDK คือ 1
มีวิธีการคล้ายกับ setError ที่ทำสิ่งนี้โดยอัตโนมัติหรือฉันต้องเขียนโค้ดให้หรือไม่
ขอบคุณ
ฉันต้องการสิ่งEditText
ที่ดูเหมือนว่าข้อผิดพลาดนี้:
การเรียกใช้ onError มีลักษณะเช่นนี้แทน:
หมายเหตุ: แอปทำงานบน SDK 19 (4.4.2)
min SDK คือ 1
มีวิธีการคล้ายกับ setError ที่ทำสิ่งนี้โดยอัตโนมัติหรือฉันต้องเขียนโค้ดให้หรือไม่
ขอบคุณ
คำตอบ:
ไม่มีความจำเป็นต้องใช้ห้องสมุดของบุคคลที่สามเนื่องจาก Google เปิดตัวเป็นเป็นส่วนหนึ่งของ TextInputLayout
design-support-library
ทำตามตัวอย่างพื้นฐาน:
<android.support.design.widget.TextInputLayout
android:id="@+id/text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true">
<android.support.design.widget.TextInputEditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your name" />
</android.support.design.widget.TextInputLayout>
หมายเหตุ:โดยการตั้งค่าapp:errorEnabled="true"
เป็นคุณลักษณะของTextInputLayout
มันจะไม่เปลี่ยนขนาดของมันเมื่อมีข้อผิดพลาดจะปรากฏขึ้น - ดังนั้นจึงเป็นพื้นบล็อกพื้นที่
เพื่อแสดงให้เห็นข้อผิดพลาดด้านล่างEditText
คุณก็ต้องโทร#setError
ในTextInputLayout
(ไม่เกี่ยวกับเด็กEditText
):
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");
til.setError(null)
หากต้องการซ่อนข้อผิดพลาดและการตั้งค่าสีก็เรียก
ในการใช้งานTextInputLayout
คุณจะต้องเพิ่มสิ่งต่อไปนี้ในการbuild.gradle
พึ่งพาของคุณ:
dependencies {
compile 'com.android.support:design:25.1.0'
}
โดยค่าเริ่มต้นบรรทัดของEditText
จะเป็นสีแดง setError
หากคุณจำเป็นต้องแสดงสีที่แตกต่างกันคุณสามารถใช้รหัสต่อไปโดยเร็วที่สุดเท่าที่คุณเรียก
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
เพื่อล้างมันก็เรียกclearColorFilter
ฟังก์ชั่นเช่นนี้
editText.getBackground().clearColorFilter();
textInputLayout.setError("Error messsage")
ใช้สีของตัวกรองEditText
ควรเปลี่ยนเป็นสีแดง textInputLayout.setError(null)
เพื่อที่จะตั้งค่ามันก็มากพอที่จะเรียกร้อง
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
ไม่ต้องการอีกต่อไปกับห้องสมุดสนับสนุนล่าสุด
EditText
TextInputLayout
ฉันเห็นคำตอบนี้และยังไม่สามารถระบุสิ่งที่ฉันต้องการเปลี่ยนแปลงได้ สิ่งที่พลาดง่ายมาก
โทรแทนmyTextInputLayout.setError()
myEditText.setError()
คอนเทนเนอร์และการบรรจุเหล่านี้มีฟังก์ชันการทำงานสองอย่างในการตั้งข้อผิดพลาด ฟังก์ชั่นที่คุณต้องการคือหนึ่งในคอนเทนเนอร์ แต่คุณอาจต้องการเวอร์ชัน 23 ขั้นต่ำสำหรับสิ่งนั้น
คุณEditText
ควรห่อด้วยTextInputLayout
<android.support.design.widget.TextInputLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tilEmail">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:ems="10"
android:id="@+id/etEmail"
android:hint="Email"
android:layout_marginTop="10dp"
/>
</android.support.design.widget.TextInputLayout>
หากต้องการรับข้อความแสดงข้อผิดพลาดอย่างที่คุณต้องการให้ตั้งค่าข้อผิดพลาดเป็น TextInputLayout
TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
tilEmail.setError("Invalid email id");
}
คุณควรเพิ่มการพึ่งพาไลบรารีสนับสนุนการออกแบบ เพิ่มบรรทัดนี้ในการไล่ระดับสีของคุณ
compile 'com.android.support:design:22.2.0'
คำตอบของ reVerse นั้นยอดเยี่ยม แต่ก็ไม่ได้ชี้ให้เห็นว่าจะลบข้อผิดพลาดแบบลอยได้อย่างไร
คุณจะต้องedittext.setError(null)
ลบมัน
นอกจากนี้ในขณะที่บางคนชี้ให้เห็นคุณไม่ต้องการTextInputLayout.setErrorEnabled(true)
แบบ
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter something" />
</android.support.design.widget.TextInputLayout>
รหัส
TextInputLayout til = (TextInputLayout) editText.getParent();
til.setError("Your input is not valid...");
editText.setError(null);
TextInputLayout til = (TextInputLayout)editText.getParent();
til.setErrorEnabled(true);
til.setError("some error..");
หากใครยังคงพบข้อผิดพลาดกับการใช้ห้องสมุดออกแบบของ Google ตามที่ระบุไว้ในคำตอบแล้วโปรดใช้สิ่งนี้ตามความเห็นโดย @h_k ซึ่งเป็น -
แทนที่จะเรียกใช้setError บน TextInputLayoutคุณอาจใช้setError บน EditTextเอง
private EditText edt_firstName;
private String firstName;
edt_firstName = findViewById(R.id.edt_firstName);
private void validateData() {
firstName = edt_firstName.getText().toString().trim();
if (!firstName.isEmpty(){
//here api call for ....
}else{
if (firstName.isEmpty()) {
edt_firstName.setError("Please Enter First Name");
edt_firstName.requestFocus();
}
}
}
EditText
คุณไม่น่าจะมีความสามารถในการทำที่มีเพียง มีโอกาสมากขึ้นที่คุณจะต้องการสิ่งที่ล้อมรอบEditText
หรือเพิ่มเข้าไป ดูgithub.com/rengwuxian/MaterialEditText