我想有一個EditText的背景作爲一個「正常」的EditText但錯誤處理的TextInputEditText(錯誤信息出現在底部,而不是「!」可繪製出現)。不要更改錯誤的TextInputLayout背景
我得到了這樣的事情:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:setError="@{viewModel.error}">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/simple_edit_text_background"
android:ellipsize="end"
android:inputType="textMultiLine|textNoSuggestions"
android:text="@={viewModel.value}"
style="@style/MyEditTextStyle" />
</android.support.design.widget.TextInputLayout>
但似乎當我設置錯誤的TextInputLayout它改變了背景繪製(這是在正常TextInputEditText,下劃線),以錯誤的顏色TextView中。
所以這是我的EditText看起來像:
private void updateEditTextBackground() {
if (mEditText == null) {
return;
}
Drawable editTextBackground = mEditText.getBackground();
if (editTextBackground == null) {
return;
}
ensureBackgroundDrawableStateWorkaround();
if (android.support.v7.widget.DrawableUtils.canSafelyMutateDrawable(editTextBackground)) {
editTextBackground = editTextBackground.mutate();
}
if (mErrorShown && mErrorView != null) {
// Set a color filter of the error color
editTextBackground.setColorFilter(
AppCompatDrawableManager.getPorterDuffColorFilter(
mErrorView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
} else if (mCounterOverflowed && mCounterView != null) {
// Set a color filter of the counter color
editTextBackground.setColorFilter(
AppCompatDrawableManager.getPorterDuffColorFilter(
mCounterView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
} else {
// Else reset the color filter and refresh the drawable state so that the
// normal tint is used
DrawableCompat.clearColorFilter(editTextBackground);
mEditText.refreshDrawableState();
}
}
該更新的研究背景顏色
我們可以以下方法中看到它在TextInputLayout的代碼這裏:
if (mErrorShown && mErrorView != null) {
// Set a color filter of the error color
editTextBackground.setColorFilter(
AppCompatDrawableManager.getPorterDuffColorFilter(
mErrorView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
}
因爲這種方法是私人的我不能重寫它,因爲我仍然希望我的錯誤TextV視圖的顏色是紅色的我目前看不到任何解決方案。任何想法?
一個解決方案可能會重置背景顏色爲setError
本來被調用後的默認值,但他們的任何回調,如onError
方法將被解僱,一旦錯誤設置爲TextView/EditText?
很好的解決方案。又一次,我們需要使用黑客來克服Android的糟糕設計。 – Storix
夢幻般的解決方案.... –
@覆蓋! – Killer