我有一个EditText包含在TextInputLayout中。我希望在EditText下显示错误,但要对齐到屏幕的右端。
我的XML是:
<android.support.design.widget.TextInputLayout
android:id="@+id/text_input_email"
style="@style/forgot_pass_text_inputlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_enter_email_message"
android:layout_marginTop="@dimen/email_padding_top"
android:hintTextAppearance="@{forgotPasswordVM.hintTextAppearance}"
android:theme="@style/forgot_pass_til_state"
app:error="@{forgotPasswordVM.email.textInputError}">
<EditText
android:id="@+id/actv_email"
style="@style/forgot_pass_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/email_address"
android:imeActionId="@+id/btn_submit"
android:imeOptions="actionSend"
android:inputType="textEmailAddress"
android:maxLines="1"
android:onEditorAction="@{forgotPasswordVM.onEditorAction}"
android:singleLine="true"
app:binding="@{forgotPasswordVM.email.text}" />
</android.support.design.widget.TextInputLayout>
我在使用数据绑定。
所以多亏了迈克的回答,我才想出了解决办法。
我创建了一个自定义类:
public class CustomTextInputLayout extends TextInputLayout {
public CustomTextInputLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setErrorEnabled(boolean enabled) {
super.setErrorEnabled(enabled);
if (!enabled) {
return;
}
try {
Field errorViewField = TextInputLayout.class.getDeclaredField("mErrorView");
errorViewField.setAccessible(true);
TextView errorView = (TextView) errorViewField.get(this);
if (errorView != null) {
errorView.setGravity(Gravity.RIGHT);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.END;
errorView.setLayoutParams(params);
}
}
catch (Exception e) {
// At least log what went wrong
e.printStackTrace();
}
}
}
现在我简单地用CustomTextInputLayout替换了我的TextInputLayout。像魅力一样有效。多谢,迈克。我希望我能给你更多的答案。
我使用的是带有AppCompatEditText的TextInputLayout,它为AppCompatEditText提供了一个基于xml形状的自定义背景。每当我设置一些错误,错误线从布局的开始。有没有办法给那个错误行做填充。
是否有一种方法可以强制TextInputLayout错误消息使用一行? 我尝试将放置在TextInputLayout上,其error_apperation样式包含: 但它不起作用。然而,改变颜色是有效的。我不明白,mErrorView只是一个文本视图,它应该可以工作。
我正在使用库。 正在调用,但没有显示错误。可能是什么问题?我怎么解决这个?
我希望有一个EditText,背景是一个“普通”EditText,但有一个TextInputEditText的错误处理(错误消息出现在底部,而不是“!”可绘图的出现)。 我有这样的东西: 但是,当我在TextInputLayout上设置error时,它会将背景drawable(在普通的TextInputEditText中是下划线)更改为error TextView的颜色。 一种解决方案可能是在调用