关于Android的EditText问题总结

1、取消Activity中第一个Activity自动聚焦   --  在Activity中最前面添加一个隐藏的EditText

 <!-- 这里是为了不让进入此Activity时,TextEdi天自动聚焦  这里在设置一个隐藏的TextEdit    -->
    <EditText
        android:id="@+id/hidden_editText1"
        android:layout_width="wrap_content"
        android:layout_height="0dip"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/listener_textView3"
        android:ems="10" /> 


2、进入Activity后,输入法自动弹出问题

在Android应用中,当跳转到某个Activity时,该Activity显示页面的EditText获得焦点,在某些机器中会触发软键盘的自动弹出。有时候为了更好的用户体验,需要控制在用户点击EditText时才弹出软键盘,即需要才弹出。


在androidminifest文件当中,在需要屏蔽输入法的Activity里添加属性: android:windowSoftInputMode="adjustPan|stateHidden" 。


3、EditText常用属性介绍

1 、EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password=true // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码。 editText.setTransformat

1、EditText输入的文字为密码形式的设置

(1)通过.xml里设置:

 把该EditText设为:android:password="true" // 以”.”形式显示文本

(2)在代码里设置:

通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码。

editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//设置密码为不可见。

2、(1)EditText输入的文字为电话号码

Android:phoneNumber=”true”  //输入电话号码

3、EditText字数限制的设置

(1)在.xml中设置:android:maxLength=“50” 

(2)代码中设置:   

editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});

4、EditText设置字体

android:typeface="monospace" //设置字型。字形有:normal, sans, serif,monospace

5、EditText是否可编辑

Android:editable // 是否可编辑

6、在EditText中软键盘的调起、关闭

(1)EditText有焦点(focusable为true)阻止输入法弹出

 editText=(EditText)findViewById(R.id.txtBody);

   editText.setOnTouchListener(new OnTouchListener(){  

         public boolean onTouch(View v, MotionEvent event){ 

            editText.setInputType(InputType.TYPE_NULL); //关闭软键盘     

            return false;

         }

    });

(2)当EidtText无焦点(focusable=false)时阻止输入法弹出

 InputMethodManager imm =

(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 

 imm.hideSoftInputFromWindow(editText.getWindowToken(),0);

(3)调用数字键盘并设置输入类型和键盘为英文

etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //调用数字键盘

rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//设置输入类型和键盘为英文
或者:android:inputType="textUri|textMultiLine"

(4)android:focusable="false"//键盘永远不会弹出


<activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自动弹出键盘

 

//关闭键盘(比如输入结束后执行)
InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);

 

//自动弹出键盘

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

etEditText.requestFocus();//让EditText获得焦点,但是获得焦点并不会自动弹出键盘

7、android:layout_gravity和android:gravity的区别

(1)android:layout_gravity是本元素对父元素的重力方向。

(2)android:gravity是本元素所有子元素的重力方向。

8、android:padding和android:layout_margin区别

这两个都可以设置边距,但有细微的区别:

(1)android:padding是相对父view的边距

(2)android:layout_margin是相对同一级View的边距

例:LinearLayout是水平布局,下面有两个按钮,

(a)如果右边的按钮想距左边的按钮15px,因为这两个按钮是同一级的,应该用android:layout_margin;

(b)如果右边的按钮想距左边的距离为350px,应该用android:padding

9、android:numeric//只接受数字

android:numeric来控制输入的数字类型,一共有三种分别为integer(正整数)、signed(带符号整数,有正负)和decimal(浮点数)。

10、Enter键图标的设置

软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:

(1)actionUnspecified未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED效果:

(2)actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE效果:

(3)actionGo去往,对应常量EditorInfo.IME_ACTION_GO 效果:

(4)actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH效果: 

(5)actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND效果:

(6)actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT效果:

(7)actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE效果:

 

11、使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:

android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕
同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键
android:imeOptions="actionNone" 
//输入框右侧不带任何提示
android:imeOptions="actionGo" 
  //右下角按键内容为'开始'
android:imeOptions="actionSearch" 
//右下角按键为放大镜图片,搜索
android:imeOptions="actionSend" 
  //右下角按键内容为'发送'
android:imeOptions="actionNext" 
 //右下角按键内容为'下一步'
android:imeOptions="actionDone" 
//右下角按键内容为'完成'

12、限定edittext能输入数字和字母,并且默认输入为数字,如身份证号码

android:inputType="number"
android:digits="0123456789xyzXYZ"

13、软键盘的调起导致原来的界面被挤上去,或者导致界面下面的tab导航被挤上去,解决方法如下

解决方法:

使用Manifest中的Activity的android:windowSoftInputMode的"adjustPan"属性。

另外注意:有关软键盘的问题可参考android:windowSoftInputMode中属性。

14、edittext光标详解
edittext.requestFocusFromTouch();//让光标放入到点击位置。
edittext.requestFocus();//默认方式获得焦点

EditText editor = (EditText)getCurrentView();//光标处插入
int cursor = editor.getSelectionStart();
editor.getText().insert(cursor,delta);

 

让光标移到末端(这样文字就会向前显示)
EditText et = ...
String text = "text";
et.setText(text);
et.setSelection(text.length());

 

android:cursorVisible="false" 隐藏光标

android:background="#00000000"//不要文本框背景 


4、EditText实例  -- android_文本框实现搜索和清空效果


本文实现的效果:文本框输入为空时显示输入的图标;不为空时显示清空的图标,此时点击清空图标能清空文本框内输入文字。

正文

  一、实现效果

    

       

 

  二、实现代码 

    监听输入

     /**
     * 动态搜索
     
*/
    
private  TextWatcher tbxSearch_TextChanged  =   new  TextWatcher() {

        
// 缓存上一次文本框内是否为空
         private   boolean  isnull  =   true ;

        @Override
        
public   void  afterTextChanged(Editable s) {
            
if  (TextUtils.isEmpty(s)) {
                
if  ( ! isnull) {
                    mSearchView.setCompoundDrawablesWithIntrinsicBounds(
null ,
                            
null , mIconSearchDefault,  null );
                    isnull 
=   true ;
                }
            } 
else  {
                
if  (isnull) {
                    mSearchView.setCompoundDrawablesWithIntrinsicBounds(
null ,
                            
null , mIconSearchClear,  null );
                    isnull 
=   false ;
                }
            }
        }

        @Override
        
public   void  beforeTextChanged(CharSequence s,  int  start,  int  count,
                
int  after) {
        }

        
/**
         * 随着文本框内容改变动态改变列表内容
         
*/
        @Override
        
public   void  onTextChanged(CharSequence s,  int  start,  int  before,
                
int  count) {
            
        }
    };

     触摸事件

     private  OnTouchListener txtSearch_OnTouch  =   new  OnTouchListener() {
        @Override
        
public   boolean  onTouch(View v, MotionEvent event) {
            
switch  (event.getAction()) {
            
case  MotionEvent.ACTION_UP:
                
int  curX  =  ( int ) event.getX();
                
if  (curX  >  v.getWidth()  -   38
                        
&&   ! TextUtils.isEmpty(mSearchView.getText())) {
                    mSearchView.setText(
"" );
                    
int  cacheInputType  =  mSearchView.getInputType(); //  backup  the input type
                    mSearchView.setInputType(InputType.TYPE_NULL); //  disable soft input
                    mSearchView.onTouchEvent(event); //  call native handler
                    mSearchView.setInputType(cacheInputType); //  restore input  type
                     return   true ; //  consume touch even
                }
                
break ;
            }
            
return   false ;
        }
    };

    绑定事件

     private  Drawable mIconSearchDefault;  //  搜索文本框默认图标
     private  Drawable mIconSearchClear;  //  搜索文本框清除文本内容图标

    @Override
    
protected   void  onCreate(Bundle savedInstanceState) {
        
super .onCreate(savedInstanceState);
        setContentView(R.layout.main)
        
        
final  Resources res  =  getResources();
        mIconSearchDefault 
=  res.getDrawable(R.drawable.txt_search_default);
        mIconSearchClear 
=  res.getDrawable(R.drawable.txt_search_clear);
        
        mSearchView 
=  (EditText) findViewById(R.id.txtSearch);
        mSearchView.addTextChangedListener(tbxSearch_TextChanged);
        mSearchView.setOnTouchListener(txtSearch_OnTouch);
    }

    代码说明:

      1. 为输入框绑定触摸事件(模拟点击事件捕捉)。通过监听点击区域判断是否点击清空图片,如果在该区域并且文本框不为空,则清空文本框。

      2. 为输入框绑定文本改变事件监听,根据内容改变动态设置图标显示。

      3. 维持清空操作后软键盘状态。

  三、参考

    1.  how to block virtual keyboard while clicking on edittext in android?

 

  四、小图标下载

      

    (右键另存为即可。)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值