gpt4 book ai didi

android - Android EditText错误消息未显示在底部

转载 作者:行者123 更新时间:2023-12-03 07:45:28 25 4
gpt4 key购买 nike

我有一个表单,用户可以在其中输入客户信息。当我尝试验证字段时,我使用了editText.setError(errorMessage),它显示了错误消息,但是它显示在我的EditText的顶部,这使用户感到困惑。如下图所示。

enter image description here

关于如何解决此问题的任何想法?

XML上的EditText

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="br.com.intelecto.intesigmobile.activity.ClienteEditActivityFragment">

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_nome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cliente_nome"
android:imeActionId="@+id/cli_name"
android:imeActionLabel="@string/str_next"
android:imeOptions="actionUnspecified"
android:inputType="textPersonName"
android:maxLines="1"
android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_telefone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cliente_telefone"
android:imeActionId="@+id/cli_cpf"
android:imeActionLabel="@string/str_next"
android:imeOptions="actionUnspecified"
android:inputType="phone"
android:maxLines="1"
android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cliente_email"
android:imeActionId="@+id/cli_cpf"
android:imeActionLabel="@string/str_next"
android:imeOptions="actionUnspecified"
android:inputType="textEmailAddress"
android:maxLines="1"
android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_cpf"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cliente_cpf"
android:imeActionId="@+id/cli_cpf"
android:imeActionLabel="@string/str_next"
android:imeOptions="actionUnspecified"
android:inputType="number"
android:maxLines="1"
android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_endereco"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cliente_endereco"
android:imeActionId="@+id/cli_address"
android:imeActionLabel="@string/str_next"
android:imeOptions="actionUnspecified"
android:inputType="textPostalAddress"
android:maxLines="1"
android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_bairro"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cliente_bairro"
android:imeActionId="@+id/cli_district"
android:imeActionLabel="@string/str_next"
android:imeOptions="actionUnspecified"
android:inputType="text"
android:maxLines="1"
android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

<Spinner
android:id="@+id/sp_estados"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"/>

<Spinner
android:id="@+id/sp_cidade"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:prompt="@string/cliente_cidade"/>

此ClienteEditActivity包含两个具有不同形式的片段,因此我在片段上听操作菜单的单击,单击菜单时,我用它来调用may验证:
if (!isValidEmail(etEmail)) {
cancel = true;
focusView = etEmail;
}
//after other validations
if (cancel){
focusView.reqeustFocus();
} else {
//save datas
}
isValidEmail方法是这样的:
protected boolean isValidEmail(EditText editText) {

validate = new Validate(editText);

validate.addValidador(new ValidadorVazio(getContext()));
validate.addValidador(new ValidadorEmail(getContext()));

return validate.isValid();
}

我的 Validate类如下所示:
public class Validate{
private EditText etFonte;

public Validate(EditText etFonte){
this.etFonte = etFonte;
}

public void addValidador(AbstractValidador validador){
lalidadores.add(validador);
}

public boolean isValid(){
for (AbstractValidador validator : lValidadores) {
try {
if (!validator.isValid(etFonte.getText().toString())) {
if(errorNotification != null) {
errorNotification.onInvalid(this);
} else {
setSourceViewError(validator.getMessage(), validator.getErrorDrawable());
}
return false;
} else {
if(errorNotification != null) errorNotification.onValid(this);
}
} catch (ValidadorException e) {
e.printStackTrace();
if(errorNotification != null) {
errorNotification.onInvalid(this);
} else {
setSourceViewError(e.getMessage(),validator.getErrorDrawable());
}
return false;
}
}
etFonte.setError(null);
return true;
}

private void setSourceViewError(String errorMessage, Drawable errorDrawable) {
if(errorDrawable != null) {
etFonte.setError(errorMessage, errorDrawable);
} else {
etFonte.setError(errorMessage);
}
}
}

最佳答案

在TextInputLayout而不是EditText上设置错误,这是您的代码...

<android.support.design.widget.TextInputLayout
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_nome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cliente_nome"
android:imeActionId="@+id/cli_name"
android:imeActionLabel="@string/str_next"
android:imeOptions="actionUnspecified"
android:inputType="textPersonName"
android:maxLines="1"
android:singleLine="true"/>

在运行时获取TextInputLayout并应用以下代码...
TextInputLayout textInputLayout = (TextInputLayout) findVeiwById(R.id.textInputLayout);
textInputLayout.setErrorEnabled(true);
textInputLayout.setError("Please enter a valid license number");

它将产生类似这样的输出...
enter image description here

关于android - Android EditText错误消息未显示在底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34907613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com