下の画像に示すように、ポップアップにEdiText
フィールドのすべての検証エラーを表示したい:
私の知る限りAndroidにはドロアブルがあります:
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);
また、最初の画像に示されているようにエラーメッセージを表示したいのですが、カスタムトーストにする必要があると思いますが、これについては何もわからないようです。
これを試して..
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;
}
});
以前の答えは私の問題の解決策ですが、デフォルトの_indicator_input_error
_画像の代わりにカスタムDrawable画像を使用する別のアプローチを試みました。
したがって、レイアウトxmlファイルに2つのEditText
を作成し、そのListener
にJavaコードでEditText
を実装しました。
_<?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>
_
_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
キーを押すと、ユーザーはPassword
フィールドにフォーカスされ、Username
フィールドが残るとします空の場合、以下の画像のようにエラーが表示されます。
間違った入力検証の場合:
1)ユーザー名フィールドにvikaS
というテキストを入力すると、エラーは次の画像のようになります。
2)パスワードフィールドに_Password1
_というテキストを入力すると、エラーは次の画像のようになります:
ここでは、ユーザーがEditTextフィールドを空白にしてキーボードの[次へ]キーを押した場合にのみカスタムDrawableを使用しましたが、どのような場合でも使用できます。 setError()
メソッドでDrawable
オブジェクトを提供する必要があるのはあなただけです。
回答者が回答を受け入れたことは知っていますが、上記のどれも役に立たなかった。
Android 4.0.3。を実行しているNexus Sでこれを再現できました。
これが私がそれを機能させた方法です。
次を使用してテーマを作成します。
<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"
>