我在单个屏幕上有两个edittexts,其中一个最大长度为11 n,另一个为12。
现在我想要对这两个edittexts进行以下验证。
1.只有1个edittext的值应传递到下一个屏幕。这是强制性的。只有一个的值必须传递到下一个屏幕。 2.如果用户开始输入任何编辑文本,则应强制他将11或12位数输入相应的edittexts。
此验证将在屏幕上点击按钮时完成。
有什么想法吗?
答案 0 :(得分:1)
每次用户输入任何文字时,都应使用EditText onChangeListener
重新计算字符数。每次为任一EditText小部件触发onChangeListener
时,请计算字符数,并根据字符数启用或禁用移动到下一个屏幕的按钮。
答案 1 :(得分:1)
检查以下内容: XML:
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="43dp"
android:maxLength="11"
android:ems="10" >
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_centerHorizontal="true"
android:layout_marginTop="44dp"
android:maxLength="12"
android:ems="10" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="130dp"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_below="@+id/editText1"
android:text=""
android:visibility="invisible"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText2"
android:layout_below="@+id/editText2"
android:text=""
android:visibility="invisible"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editText3"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_alignLeft="@+id/editText1"
android:layout_alignParentTop="true"
android:ems="10" />
和班级:
public class MainActivity extends Activity {
EditText et1,et2,et3;
Button btn;
TextView tv1,tv2;
@Override
protected void onStart() {
et3.requestFocus();
super.onStart();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=(EditText)findViewById(R.id.editText1);
et2=(EditText)findViewById(R.id.editText2);
et3=(EditText)findViewById(R.id.editText3);
btn=(Button)findViewById(R.id.button);
tv1=(TextView)findViewById(R.id.textView1);
tv2=(TextView)findViewById(R.id.textView2);
addListenerOnTextChangeEt1Text();
addListenerOnTextChangeEt2Text();
et1.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean hasFocus) {
if(!hasFocus){
tv1.setVisibility(View.INVISIBLE);
tv1.setVisibility(View.GONE);
}
else{
tv1.setVisibility(View.VISIBLE);
}
}
});
et2.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean hasFocus) {
if(!hasFocus){
tv2.setVisibility(View.INVISIBLE);
tv2.setVisibility(View.GONE);
}
else{
tv2.setVisibility(View.VISIBLE);
}
}
});
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(et1.getText().toString().length()<11 || et2.getText().toString().length()<12 ){
Toast.makeText(getBaseContext(), "check both edittext data", Toast.LENGTH_SHORT).show();
}
else if(et1.getText().toString().length()==11 && et2.getText().toString().length()==12){
Toast.makeText(getBaseContext(), "Show next Page", Toast.LENGTH_SHORT).show();
}
else{
Log.v("Error","");
}
}
});
}
private void addListenerOnTextChangeEt1Text(){
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int et1StringLength=et1.getText().toString().length();
Log.v("et1StringLength","--->"+et1StringLength);
int num=11-(et1StringLength);
if(et1StringLength<11){
tv1.setText("Enter"+num+"Characters more");
}
else if(et1StringLength==11){
tv1.setText("Correct");
}
else{
Log.v("Error","");
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
private void addListenerOnTextChangeEt2Text(){
et2.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int et2StringLength=et2.getText().toString().length();
Log.v("et2StringLength","--->"+et2StringLength);
int num=12-(et2StringLength);
if(et2StringLength<12){
tv2.setText("Enter"+num+"Characters more");
}
else if(et2StringLength==12){
tv2.setText("Correct");
}
else{
Log.v("Error","");
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
并点击此链接将值传递给下一个意图:here
答案 2 :(得分:0)
您可以使用
android:maxLength="11"
和
android:maxLength="12"
在各个edittext字段的xml文件中。
并将值传递给下一个活动。你可以使用意图。
在第一项活动中:
String s = myEdtxt.getText().toString();
Intent i = new Intent(this, NextAct.class);
i.putStringArrayListExtra("My Value", s);
startActivity(i);
您可以在第二个活动中将其检索为:
String s= getIntent().getStringExtra("My Value");
希望清楚。
答案 3 :(得分:0)
您可以使用EditBox的setError
属性进行验证
mUserNameView 是我的edittext
和
mUserName 是一个字符串,我在其中使用editText值来执行验证
mUserNameView.setError(null);
// Store values at the time of the login attempt.
mUserName = mUserNameView.getText().toString();
// Check for a valid email address.
if (TextUtils.isEmpty(mUserName)) {
mUserNameView.setError(getString(R.string.error_field_required));
}
if (mUserName.length() > 13)
{
mUserNameView.setError(getString(R.string.error_field_notValid));
}
R.string.error_field_required
R.string.error_field_notValid
在资源
中的values文件夹中的字符串中定义根据需要调整登录信息。我已经给代码示例如何在代码中验证。和错误消息(在String文件中指定的任何内容)在特定的编辑框中以非常漂亮的方式生成,