Как отобразить ошибки ввода во всплывающем окне?
Я хочу показать все мои ошибки проверки от EdiText поля в всплывающем окне, как показано ниже:

насколько я знаю, Android имеет drawables:
1) popup_inline_error.9.png

2) popup_inline_error_above.9.png

3) indicator_input_error.png

Я могу отобразить красный индикатор ошибки внутри правой части EditText использование:
Drawable err_indiactor = getResources().getDrawable(R.drawable.indicator_input_error);
mEdiText.setCompoundDrawablesWithIntrinsicBounds(null, null, err_indiactor, null);
Теперь также я хочу отобразить сообщение об ошибке, как показано на первом изображении, но, похоже, я не получаю никакого представления об этом, хотя я думаю, что это должен быть пользовательский тост.
3 ответов:
попробуйте это..
final EditText editText=(EditText) findViewById(R.id.edit); editText.setImeActionLabel("",EditorInfo.IME_ACTION_NEXT); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_NEXT){ if( editText.getText().toString().trim().equalsIgnoreCase("")) editText.setError("Please enter some thing!!!"); else Toast.makeText(getApplicationContext(),"Notnull",Toast.LENGTH_SHORT).show(); } return false; } });
поскольку более ранний ответ является решением моей проблемы, но я попробовал другой подход, чтобы использовать пользовательское рисованное изображение вместо default
indicator_input_errorизображения.По Умолчанию Drawable
Пользовательские Drawable
Итак, я только что создал два
EditTextв моем XML-файле макета, а затем реализовал некоторыеListenerв коде Java на этомEditText.главная.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="20dip" android:background="#222222"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Username" android:id="@+id/etUsername" android:singleLine="true" android:imeActionLabel="Next"></EditText> <EditText android:layout_width="match_parent" android:inputType="textPassword" android:layout_height="wrap_content" android:hint="Password" android:id="@+id/etPassword" android:singleLine="true" android:imeActionLabel="Next"></EditText> </LinearLayout>EditTextValidator.java
import java.util.regex.Pattern; import android.app.Activity; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; public class EditTextValidator extends Activity { private EditText mUsername, mPassword; private Drawable error_indicator; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Setting custom drawable instead of red error indicator, error_indicator = getResources().getDrawable(R.drawable.emo_im_yelling); int left = 0; int top = 0; int right = error_indicator.getIntrinsicHeight(); int bottom = error_indicator.getIntrinsicWidth(); error_indicator.setBounds(new Rect(left, top, right, bottom)); mUsername = (EditText) findViewById(R.id.etUsername); mPassword = (EditText) findViewById(R.id.etPassword); // Called when user type in EditText mUsername.addTextChangedListener(new InputValidator(mUsername)); mPassword.addTextChangedListener(new InputValidator(mPassword)); // Called when an action is performed on the EditText mUsername.setOnEditorActionListener(new EmptyTextListener(mUsername)); mPassword.setOnEditorActionListener(new EmptyTextListener(mPassword)); } private class InputValidator implements TextWatcher { private EditText et; private InputValidator(EditText editText) { this.et = editText; } @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() != 0) { switch (et.getId()) { case R.id.etUsername: { if (!Pattern.matches("^[a-z]{1,16}$", s)) { et.setError("Oops! Username must have only a-z"); } } break; case R.id.etPassword: { if (!Pattern.matches("^[a-zA-Z]{1,16}$", s)) { et.setError("Oops! Password must have only a-z and A-Z"); } } break; } } } } private class EmptyTextListener implements OnEditorActionListener { private EditText et; public EmptyTextListener(EditText editText) { this.et = editText; } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_NEXT) { // Called when user press Next button on the soft keyboard if (et.getText().toString().equals("")) et.setError("Oops! empty.", error_indicator); } return false; } } }теперь я проверил его, как:
для пустых проверок EditText:
предположим, пользователь нажимает на
Usernameполе затем открывается Softkeybord и если пользователь нажимаетNextключ, то пользователь будет сосредоточен на
Я знаю, что ответ был принят Аскер, но ни один из выше работал для меня.
я смог воспроизвести это на моем Nexus S под управлением Android 4.0.3.
вот как я заставил его работать.
создать тему с:
<style name="MyApp.Theme.Light.NoTitleBar" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:textColorPrimaryInverse">@android:color/primary_text_light </item> </style>применить
MyApp.Theme.Light.NoTitleBarтема для моего приложения / действия из манифеста.<application android:name=".MyApp" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/MyApp.Theme.Light.NoTitleBar" >


Comments