Bagaimana cara mengubah warna pesan kesalahan yang dapat diatur agar muncul di bawah bidang teks dalam TextInputLayout
(melalui setError(...)
- lihat status kesalahan di sini )?
Biasanya terlihat sebagai warna merah, yang ingin saya ubah. Nama / kunci item mana yang harus saya gunakan di styles.xml
file saya untuk menargetkan warna?
Terima kasih sebelumnya.
Edit:
Menambahkan app:errorTextAppearance
kunci ke saya TextInputLayout
:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:id="@+id/welcome_current_week_container"
app:errorTextAppearance="@style/WelcomeErrorAppearance">
<EditText
..../>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
dan tampilan kesalahan (disetel menjadi hijau untuk pengujian) :
<style name="WelcomeErrorAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">@android:color/holo_green_dark</item>
</style>
Hasilnya adalah petunjuk serta pesan kesalahan diberi warna (tangkapan layar dari Android Emulator yang diskalakan) :
Reguler (tidak ada kesalahan):
Status kesalahan:
Edit 2 / Hasil:
Saat pesan kesalahan muncul, petunjuk di atas bidang berubah menjadi warna yang sama dengan pesan kesalahan, mengganti warna petunjuk - ini sesuai desain.
sumber
Jawaban:
Buat gaya kustom yang digunakan
@android:style/TextAppearance
sebagai induk distyles.xml
file Anda :<style name="error_appearance" parent="@android:style/TextAppearance"> <item name="android:textColor">@color/red_500</item> <item name="android:textSize">12sp</item> </style>
Dan gunakan di widget TextInputLayout Anda:
<android.support.design.widget.TextInputLayout android:id="@+id/emailInputLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:errorTextAppearance="@style/error_appearance">
Edit: Mengatur petunjuk pada objek, yang ada di dalam TextInputLayout Anda (
EditText
,TextView
, dll) untuk menahan warna yang berbeda untuk petunjuk dan kesalahan.sumber
app:errorTextAppearance
?<android.support.design.widget.TextInputLayout app:errorTextAppearance="@style/error_appearance"><AutoCompleteTextView android:hint="@string/prompt_email"/></android.support.design.widget.TextInputLayout>
. Jadi ya, ini adalah TextView lain, itulah mengapa tidak mengambil warna kesalahan dari TextInputLayout.parent
untukparent="TextAppearance.Design.Error"
. Dengan cara itu, ia mempertahankan ukuran teks default dan atribut lainnya, tetapi mari kita sesuaikan secara khusus warna kesalahan, yang merupakan tujuan dari pertanyaan yang ada.Sebenarnya, untuk hanya mengubah warna pesan kesalahan, Anda dapat mengatur
textColorError
tema Anda (dan juga mengaturcolorControlNormal
dancolorControlActivated
untuk widget umum dan warna teks petunjuk).TextInputLayout
mengambil atribut itu. CATATAN: jika Anda mengaturerrorTextAppearance
ke gaya kustom maka tidaktextColorError
akan berpengaruh.<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorControlNormal">@color/control_normal</item> <item name="colorControlActivated">@color/control_activated</item> <item name="textColorError">@color/error</item> <!-- other styles... --> </style>
Dan di AndroidManifest.xml Anda:
<application android:theme="@style/AppTheme" android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <!-- ... --> </application>
sumber
textColorError
tidak ditemukan), tetapi saya berhasil mengaturcolorError
atribut di tema saya. Sepertinya setiap versi Android / Support Library memiliki atribut temanya sendiri.<item name="colorError">@color/error</item>
Satu catatan samping. Saya telah mencoba solusi yang diterima dengan
errorTextAppereance
. Ini berfungsi dengan sangat baik tetapi pada awalnya, warna garis bawah masukan tidak berubah setelah menerapkanerrorTextAppereance
gaya baru . Saya melihat ada beberapa komentar dan orang lain mengalami masalah yang sama.Dalam kasus saya, ini terjadi saat saya menyetel gaya baru setelah menyetel teks kesalahan baru. Seperti ini:
passwordInputLayout.error = "Password strength" passwordInputLayout.setErrorTextAppearance(R.style.InputError_Purple)
Setelah mengganti urutan kedua metode ini, teks dan warna garis bawah berubah seperti yang diharapkan.
passwordInputLayout.setErrorTextAppearance(R.style.InputError_Purple) passwordInputLayout.error = "Password strength"
Dan gaya tampilan teks kesalahan terlihat seperti ini:
<style name="InputError" parent="TextAppearance.Design.Error"/> <style name="InputError.Purple"> <item name="android:textColor">@color/purple</item> </style>
sumber
Saya perlu melakukan ini secara dinamis. Menggunakan refleksi:
public static void setErrorTextColor(TextInputLayout textInputLayout, int color) { try { Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView"); fErrorView.setAccessible(true); TextView mErrorView = (TextView) fErrorView.get(textInputLayout); Field fCurTextColor = TextView.class.getDeclaredField("mCurTextColor"); fCurTextColor.setAccessible(true); fCurTextColor.set(mErrorView, color); } catch (Exception e) { e.printStackTrace(); } }
Anda perlu menelepon
textInputLayout.setErrorEnabled(true)
sebelum menjalankan metode di atas agar ini berfungsi.sumber
Dengan
TextInputLayout
disertakan dalam Material Components Library, cukup gunakanapp:errorTextColor
atributnya.<com.google.android.material.textfield.TextInputLayout app:errorTextColor="@color/...." .../>
Dalam gaya khusus, Anda dapat menggunakan:
<style name="..." parent="Widget.MaterialComponents.TextInputLayout.FilledBox" > <item name="errorTextColor">@color/...</item> ... </style>
sumber
MEMPERBARUI
Versi mod dari Answer @ jared yang berfungsi dalam kasus saya:
public static void setErrorTextColor(TextInputLayout textInputLayout, int color) { try { Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView"); fErrorView.setAccessible(true); TextView mErrorView = (TextView)fErrorView.get(textInputLayout); mErrorView.setTextColor(color); mErrorView.requestLayout(); } catch (Exception e) { e.printStackTrace(); } }
sumber
Jika Anda menggunakan com.google.android.material.textfield.TextInputLayout tata letak masukan ini daripada Anda hanya menyetel satu gaya
<com.google.android.material.textfield.TextInputLayout android:id="@+id/textInputLayoutPassword" style="@style/LoginTextInputLayoutStyle" <style name="LoginTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"> <item name="boxStrokeColor">@color/text_input_box</item> <item name="errorTextColor">@color/colorRed</item> </style>
sumber
Tergantung pada kebutuhan, seseorang dapat mengubah / menyetel warna teks TextInputLayout secara dinamis atau langsung dalam file XML layout. Di bawah ini adalah contoh cuplikan kode
Buat gaya kustom yang menggunakan @android: style / TextAppearance sebagai induk di file styles.xml Anda :
<style name="style_error_appearance" parent="@android:style/TextAppearance"> <item name="android:textColor">@color/color_error</item> <item name="android:textSize">11sp</item> </style>
Dan, gunakan di widget TextInputLayout Anda:
<android.support.design.widget.TextInputLayout android:id="@+id/your_input_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:errorTextAppearance="@style/style_error_appearance">
your_input_layout.setErrorTextAppearance(R.style.style_error_appearance);
Jika Anda ingin menyetel warna teks kesalahan tunggal / sama untuk aplikasi Anda, maka tentukan warna teks dalam tema aplikasi Anda
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Error text color... --> <item name="textColorError">@color/color_error</item> <!-- other styles... --> </style>
Dan di AndroidManifest.xml Anda:
<application android:theme="@style/AppTheme" android:icon="@drawable/ic_launcher" android:label="@string/your_app_name"> <!-- ... --> </application>
sumber
Saya melihat ke dalam sumber TextInputLayout dan saya menyadari bahwa warna teks kesalahan didapat dari colors.xml. Cukup tambahkan ini ke colors.xml Anda:
<color name="design_textinput_error_color_light" tools:override="true">your hex color</color>
sumber