EditText 的应用

1、EditText 编辑框赋值:
editText.setText(); 默认情况下,赋值后,光标在文字的最前面,
editText.clearFocus(); 加上这一句后,就可以将光标移到文字的最后。

2、显示、隐藏键盘,代码如下:
btn_hide = (Button) findViewById(R.id.btn_hide);
btn_show = (Button) findViewById(R.id.btn_show);
edit = (EditText) findViewById(R.id.edit);
final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
btn_hide.setOnClickListener(new Button.OnClickListener(){
    @Override
    public void onClick(View arg0) {
        imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);//隐藏软键盘   
    }
});
btn_show.setOnClickListener(new Button.OnClickListener(){
    @Override
    public void onClick(View arg0) {
        if(edit != null){
            imm.showSoftInput(edit, 0); //显示软键盘 
        }
    }
});

3、获取enter回车键事件
edit = (EditText) findViewById(R.id.edit);
        
edit.setOnKeyListener(new OnKeyListener() {
    @Override
    public boolean onKey(View view, int keyCode, KeyEvent event) {
        if((event.getAction()== KeyEvent.ACTION_DOWN)&& (keyCode== KeyEvent.KEYCODE_ENTER)){ 
            return true; 
        } 
        return false; 
    }
});

4、EditText 有一个属性可以定义输入字符的顺序
android:gravity="right"  --->  实现从右往左输入
android:gravity="left"   --->  实现从左往右输入

5、实现编辑框不可编辑
if (value) {
    editText.setFilters(new InputFilter[] { new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start,int end, Spanned dest, int dstart, int dend) {
            return source.length() < 1 ? dest.subSequence(dstart, dend): "";
        }
    } });
} else {
    editText.setFilters(new InputFilter[] { new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start,int end, Spanned dest, int dstart, int dend) {
            return null;
        }
    } });
}

6、监听编辑框的change事件
editText01.addTextChangedListener(watcher);

final TextWatcher watcher = new TextWatcher(){
    @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) {
        //如果输入的是大写,则将其转换成小写
        String str = editText01.getText().toString().toLowerCase().trim();
        if(str.equals("") || str == null){
            //隐藏控件
            lv.setVisibility(View.GONE);
            mLayout.setVisibility(View.GONE);
            mMakeText(getString(R.string.str_toast),true);
        } else {
            getWord(str);
        }
    }
};

7、点击编辑框,弹出键盘时,界面布局如何显示:
· 可以在AndroidManifest.xml的Activity设置属性 android:windowSoftInputMode=""
· 属性值说明如下:
"stateUnspecified":软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。

"stateUnchanged":软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

"stateHidden":当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

"stateAlwaysHidden":软键盘总是被隐藏的,当该Activity主窗口获取焦点时。

"stateVisible":软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。

"stateAlwaysVisible":当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

"adjustUnspecified":它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。
系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,
这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

"adjustResize":该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间

"adjustPan":该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到
输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
· 默认情况,当键盘弹出时,会将整个布局向上挤压,空出下方区域显示键盘,这种情况整个布局会被压变形,影响美观。
设置 "adjustPan" 平移模式,弹出键盘时,这个布局会上移,而不会被压缩。

8、编辑框自动获取焦点:
    edit_name.setFocusable(true);
    edit_name.setFocusableInTouchMode(true);
    edit_name.requestFocus();
9.Android:EditText限制文字输入
     Android的编辑框控件EditText在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,不能输入一些非法字符等,这些需求有些可以使用android控件属性直接写在布局xml文件里,比如android:numeric="integer"(只允许输入数字);
     对于一些需求,如非法字符限制(例如不允许输入#号,如果输入了#给出错误提示),做成动态判断更方便一些,而且容易扩展;
     在Android里使用TextWatcher接口可以很方便的对EditText进行监听;TextWatcher中有3个函数需要重载:
    public void beforeTextChanged(CharSequence s, int start,
                                  int count, int after);
    public void onTextChanged(CharSequence s, int start, int before, int count);
    public void afterTextChanged(Editable s);
     从函数名就可以知道其意思,每当敲击键盘编辑框的文字改变时,上面的三个函数都会执行,beforeTextChanged可以给出变化之前的内容,onTextChanged和afterTextChanged给出追加上新的字符之后的文本;
所以对字符的限制判断可以在afterTextChanged函数中进行,如果检查到新追加的字符为认定的非法字符,则在这里将其delete掉,那么他就不会显示在编辑框里了:
private final TextWatcher mTextWatcher = new TextWatcher() {
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    } 

    public void onTextChanged(CharSequence s, int start, int before, int count) {
    } 

    public void afterTextChanged(Editable s) {
        if (s.length() > 0) {
            int pos = s.length() - 1;
            char c = s.charAt(pos);
            if (c == '#') {
//这里限制在字串最后追加#
                s.delete(pos,pos+1);
                Toast.makeText(MyActivity.this, "Error letter.",Toast.LENGTH_SHORT).show();
            }
        }
    }
};
注册监听:
EditText mEditor = (EditText)findViewById(R.id.editor_input);
mEditor.addTextChangedListener(mTextWatcher);
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值