팝업에 입력 오류를 표시하는 방법은 무엇입니까?
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);
이제는 첫 번째 이미지와 같이 오류 메시지를 표시하고 싶지만 Custom Toast이어야한다고 생각하지만 이것에 대해 전혀 알지 못하는 것 같습니다.
이 시도..
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 이미지를 사용하는 다른 접근 방식을 시도했습니다 .
기본 드로어 블
커스텀 드로어 블
그래서 방금 EditText
레이아웃 xml 파일에 두 개 를 만든 다음 Listener
Java 코드에서 일부를 구현 했습니다 EditText
.
main.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
사용자가 키를 누르면 사용자가 Password
필드에 초점을 맞추고 Username
필드가 비어있는 경우 아래 이미지와 같이 오류가 표시됩니다.
잘못된 입력 유효성 검사 :
1) vikaS
사용자 이름 필드에 텍스트 를 입력하면 아래 이미지와 같은 오류가 발생합니다.
2) Password1
비밀번호 필드에 텍스트 를 입력하면 아래 이미지와 같은 오류가 발생합니다.
노트 :
여기서는 사용자가 EditText 필드를 비워두고 키보드에서 Next 키를 누른 경우에만 사용자 정의 드로어 블을 사용했지만 어떤 경우에도 사용할 수 있습니다. 메서드 Drawable
에서 개체 를 제공하면 setError()
됩니다.
질문자가 답변을 수락했음을 알고 있지만 위의 어느 것도 나를 위해 일하지 않았습니다.
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" >
참고 URL : https://stackoverflow.com/questions/5218691/how-to-display-input-errors-in-popup
'Programing' 카테고리의 다른 글
Visual Studio 2010은 어떤 C ++ 11 기능을 지원합니까? (0) | 2020.12.02 |
---|---|
JSF panelGrid에서 colspan과 rowspan을 설정하는 방법은 무엇입니까? (0) | 2020.12.02 |
웹 브라우저에서 onblur와 onfocusout의 차이점은 무엇입니까? (0) | 2020.12.02 |
C / C ++에서 const 배열과 정적 const 배열의 차이점은 무엇입니까? (0) | 2020.12.02 |
시간 초과 WCF 서비스 (0) | 2020.12.02 |