18 UI_常用组件-BasicViews-EditText-InputFilter

UI-常用组件basic View-EditText

1EditText文本输入框,相当于html当中<input type="text"  />.

  代码:<EditText

        android:id="@+id/editText1"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:hint="请输入数字!!"

        >

</EditText>

2、子元素    requestFocus  让某个元素自动获取焦点。 

当进入页面时,都没有<requestFocus />时,系统自动把焦点放在第一个子元素上;

3EditText文本输入框的属性:

❶hinttext为空时显示的文字提示信息。

❷TextColorHint:可以通过TextColorHint 设置提示信息的颜色。

❸digits:允许输入的文字

❹numeric:只能输入数字,有三种值, integer(正整数),singed decimal

❺:ems VS maxLength   maxLength可以真正的控制字符个数

限制 EditText 内容的特殊方式1

 editText.addTextChangedListener(new TextWatcher()

EditText 内容的特殊方式2

editText3.setFilters(new InputFilter[]{

new InputFilter.AllCaps(),

new InputFilter.LengthFilter(10),

new InputFilter(){

@Override

public CharSequence filter(CharSequence source, int start,

int end, Spanned dest, int dstart, int dend) {

return null;

}

}

});


特殊方式12的小案例:

(其中方式1editText2editText3;方式2editText1

代码:

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/editText1"
        android:layout_width="168dp"
        android:layout_height="50dp"
         android:ems="10"
         android:maxLength="10"
         android:singleLine="true"
         android:hint="请输入数字!!"
         >
        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:ems="10"
         android:maxLength="10"
         android:singleLine="true"
         android:hint="请输入汉字!!"
         android:numeric="integer"
         android:textColorHint="#ff0000"
        android:layout_below="@id/editText1"/>

    <EditText
        android:id="@+id/editText3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
         android:maxLength="10"
         android:singleLine="true"
         android:digits="1234abcd.+"
        android:layout_below="@id/editText2" />

</LinearLayout>

Test_edittextActivity.java:

package test.edittext;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.Toast;

public class Test_edittextActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        EditText editText1=(EditText)findViewById(R.id.editText1);
        EditText editText2=(EditText)findViewById(R.id.editText2);
        EditText editText3=(EditText)findViewById(R.id.editText3);
        
        editText1.setFilters(new InputFilter[]{
                new InputFilter.LengthFilter(5),//对长度进行过滤,只能输入5个
                new InputFilter.AllCaps(),//输入的小写字母都会变成大写字母
                new InputFilter(){

                    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
                            int dend) {
                        //source当前输入的字符
                        //dest是之前输入的字符
                        //以上参数可以通过断点来检测
                        //可以将当前输入的转化成中文
                        if("1".equals(source.toString())){
                            return "一";
                        }else if("2".equals(source.toString())){
                            return "二";
                        }else{
                            return null;
                        }
                        
                    }
                    
                }
                
        });
        
        editText2.addTextChangedListener(new TextWatcher(){
            public void afterTextChanged(Editable s) {//修改文本之后
                String string = s.toString();
                //s输入什么就在显示框中弹出什么内容
                Toast.makeText(getApplicationContext(), string, 1).show();
            }
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }
        });
        
        editText3.addTextChangedListener(new TextWatcher(){
            public void afterTextChanged(Editable s) {//修改文本之后
                String string = s.toString();
                if(string.indexOf("4")!=-1){//不能输入4,如果输入4就弹出提示框,并且清空
                    s.clear();
                    Toast.makeText(getApplicationContext(), "不能输入4", 1).show();
                }
            }
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // 修改文本之前
            }
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }
        });
    }
}

运行结果:

 没有输入前的界面:                           输入第一个文本框1a2b3:     

              

 输入第二个文本框1234时:                 输入第三个文本框1234时

          

原文地址:https://www.cnblogs.com/cxm-weiniss/p/7212304.html