当前位置: 首页 > 知识库问答 >
问题:

TextInputLayout错误右对齐

赵晟睿
2023-03-14

我有一个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>

我在使用数据绑定。

共有1个答案

公沈浪
2023-03-14

所以多亏了迈克的回答,我才想出了解决办法。

我创建了一个自定义类:

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的颜色。 一种解决方案可能是在调用