Yanıtlar:
Google'ın bir TextInputLayout
parçası olarak tanıtımını yaptığı için üçüncü taraf bir kitaplık kullanmaya gerek yoktur design-support-library
.
Temel bir örneği takiben:
<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>
Not:app:errorEnabled="true"
Bir öznitelik olarak ayarlandığında , bir TextInputLayout
hata görüntülendiğinde boyutunu değiştirmez - bu nedenle temel olarak alanı engeller.
Aşağıdaki Hata göstermek için EditText
sadece çağrıya ihtiyaç #setError
üzerine TextInputLayout
(NOT çocuğun üzerine EditText
):
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");
Hatayı gizlemek ve renk tonunu sıfırlamak için arayın til.setError(null)
.
Kullanmak TextInputLayout
için build.gradle
bağımlılıklarınıza aşağıdakileri eklemeniz gerekir :
dependencies {
compile 'com.android.support:design:25.1.0'
}
Varsayılan olarak, EditText
irade çizgisi kırmızı olacaktır. Farklı bir renk görüntülemeniz gerekiyorsa, aradığınız anda aşağıdaki kodu kullanabilirsiniz setError
.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
Temizlemek için clearColorFilter
işlevi şöyle çağırmanız yeterlidir :
editText.getBackground().clearColorFilter();
textInputLayout.setError("Error messsage")
anda rengi EditText
kırmızıya dönmelidir. Sıfırlamak için aramak yeterlidir textInputLayout.setError(null)
.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
artık en son destek kütüphanesi ile ihtiyaç
EditText
değil, çağırarak yaşıyordum TextInputLayout
. Bu cevabı gördüm ve hala neyi değiştirmem gerektiğini anlayamadım. Kaçırmak çok kolay bir şey.
Sizin EditText
a sarılmış olmalıdırTextInputLayout
<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>
İstediğiniz gibi bir hata mesajı almak için hatayı TextInputLayout
TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
tilEmail.setError("Invalid email id");
}
Tasarım desteği kitaplığı bağımlılığı eklemelisiniz. Bu satırı sınıflandırma bağımlılıklarınıza ekleyin
compile 'com.android.support:design:22.2.0'
reVerse'ın cevabı harika ama kayan hata araç ipucunun nasıl kaldırılacağına işaret etmedi
Bunu edittext.setError(null)
kaldırman gerekecek .
Ayrıca, birinin işaret ettiği gibi, ihtiyacınız yokTextInputLayout.setErrorEnabled(true)
Yerleşim
<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>
kod
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..");
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
. Büyük olasılıkla, onu saranEditText
veya başka bir şekilde ekleyen bir şeye ihtiyacınız olacaktır . Bkz. Github.com/rengwuxian/MaterialEditText .