EditText

EditText控件的常用属性如下:

android:hint=”请输入数字!”//设置显示在输入位置上的提示信息

android:numeric=”integer”//设置只能输入整数,如果是小数则是:decimal

android:singleLine=”true”//设置单行输入,一旦设置为true,则文字不会自动换行。

android:password=”true”//设置只能输入密码

android:textColor = “#ff8c00”//设置字体颜色

android:textStyle=”bold”//设置字体类型,如加粗、斜体等

android:textSize=”20dip”//设置字体大小

android:textColorHighlight=”#cccccc”//设置被选中文字的底色,默认为蓝色

android:textColorHint=”#ffff00”//设置提示信息文字的颜色,默认为灰色

android:textScaleX=”1.5”//设置字与字之间的间距

android:typeface=”monospace”//设置字型,如normal, sans, serif, monospace

android:background=”@null”//设置控件的背景,默认为灰色带边框的背景,@null指透明,且没有边框

android:layout_weight=”1”//设置控件所占的权重,控制控件之间的地位

android:textAppearance=”?android:attr/textAppearanceLargeInverse”//设置文字外观

android:layout_gravity=”center_vertical”//设置控件显示的位置:默认top,这里居中显示,还有bottom

android:gravity=”top” //多行中指针在第一行位置,即顶部

android:capitalize //首字母大写

android:phoneNumber //输入电话号码

android:editable //是否可编辑

android:autoLink=”all” //设置文本超链接样式当点击网址时,跳向该网址,可选值(none/web/email/phone/map/all)

android:autoText //如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。

android:bufferType //指定getText()方式取得的文本类别

android:cursorVisible //设定光标为显示/隐藏,默认显示。

android:digits //设置允许输入哪些字符。如“1234567890.+-*/% ()”

android:editorExtras //设置文本的额外的输入数据

android:ellipsize //设置当文字过长时,该控件该如何显示。有如下值设置:”start”—?省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)

android:freezesText //设置保存文本的内容以及光标的位置

android:gravity //设置文本位置,如设置成“center”,文本将居中显示。

android:hintText //为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色

android:includeFontPadding //设置文本是否包含顶部和底部额外空白,默认为true。

android:linksClickable //设置链接是否点击连接,即使设置了autoLink。

android:marqueeRepeatLimit //在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次。

android:ems //设置TextView的宽度为N个字符的宽度。

android:maxEms //设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:minEms //设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:maxLength //限制显示的文本长度,超出部分不显示。

android:lines //设置文本的行数,设置两行就显示两行,即使第二行没有数据。

android:maxLines //设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。

android:minLines //设置文本的最小行数,与lines类似。

android:lineSpacingExtra 设置行间距。

android:lineSpacingMultiplier //设置行间距的倍数。如”1.2”

android:password //以小点”.”显示文本

android:scrollHorizontally //设置文本超出TextView的宽度的情况下,是否出现横拉条。

android:selectAllOnFocus //如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。TextView中设置后无效果。

android:shadowColor //指定文本阴影的颜色,需要与shadowRadius一起使用。

android:shadowDx //设置阴影横向坐标开始位置。

android:shadowDy //设置阴影纵向坐标开始位置。

android:shadowRadius //设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好

android:height //设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)

android:maxHeight //设置文本区域的最大高度

android:minHeight //设置文本区域的最小高度

android:width //设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width的区别看这里。

android:maxWidth //设置文本区域的最大宽度

android:minWidth //设置文本区域的最小宽度

自动弹出软键盘

为了改善用户体验,在进入一个Android页面时,自动弹出输入软键盘,实现方法如下。

方法一:

首先要对指定的输入框请求焦点。然后调用输入管理器弹出软键盘。

绑定软键盘到EditText:

1
2
3
4
5
editText.setFocusable(true);  
editText.setFocusableInTouchMode(true);  
editText.requestFocus();  
InputMethodManager inputManager = (InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);  
inputManager.showSoftInput(editText, 0);

去除软键盘显示:

1
2
3
4
edit.setText("");    
edit.clearFocus();    
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);     
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);

由于调转到一个新的页面,就需要弹出软键盘,往往页面还未加载完,造成软键盘无法弹出,这个时候可采用延时弹出的方法进行解决,延时大概300毫秒来保证页面加载完成:

方法A:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private Handler hander=new Handler(){    
public void handleMessage(android.os.Message msg) {    
edit.setFocusable(true);    
edit.setFocusableInTouchMode(true);    
edit.requestFocus();    
InputMethodManager inputManager = (InputMethodManager)edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);    
inputManager.showSoftInput(edit, 0);    
};    
};   
  
@Override    
public void onWindowFocusChanged(boolean hasWindowFocus) {    
if(visible){        
hander.sendEmptyMessageDelayed(01000);    
}    
}

方法B:

1
2
3
4
5
6
7
Timer timer = new Timer();  
timer.schedule(new TimerTask()  {  
public void run(){  
InputMethodManager inputManager = (InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);  
inputManager.showSoftInput(editText, 0);  
}  
}, 500);

方法二:

布局中自动弹出软键盘:

1
2
3
4
editText.requestFocus();  
editText.setFocusable(true);  
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);  
imm.showSoftInputFromInputMethod(editText.getWindowToken(),0);

布局中自动关闭软键盘:

1
2
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);    
imm.hideSoftInputFromWindow(talking_edit.getWindowToken() , 0);

对话框中软键盘自动弹出和关闭:

1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

通过各种百度,又搜集并整理了好多关于软键盘的一些方法

1.软键盘的显示原理

软键盘其实是一个Dialog。InputMethodService为我们的输入法创建了一个Dialog,并且对某些参数进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统会对当前的主窗口进行调整,以便留出相应的空间来显示该Dialog在底部,或者全屏。

2.活动主窗口调整

android定义了一个属性windowSoftInputMode, 用它可以让程序控制活动主窗口调整的方式。我们可以在配置文件AndroidManifet.xml中对Activity进行设置。这个属性的设置将会影响两件事情:

  • 软键盘的状态——隐藏或显示。
  • 活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。 故该属性的设置必须是下面列表中的一个值,或一个“state…”值加一个“adjust…”值的组合。在任一组设置多个值,各个值之间用|分开。

  • “stateUnspecified”: 软键盘的状态(隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是软件盘行为的默认设置。

  • “stateUnchanged”:软键盘被保持上次的状态。
  • “stateHidden”:当用户选择该Activity时,软键盘被隐藏。
  • “stateAlwaysHidden”: 软键盘总是被隐藏的。
  • “stateVisible”: 软键盘是可见的。
  • “stateAlwaysVisible”: 当用户选择这个Activity时,软键盘是可见的。
  • “adjustUnspecified”: 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。也就是说,系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚动。
  • “adjustResize”:(压缩模式) 当软键盘弹出时,要对主窗口调整屏幕的大小以便留出软键盘的空间。
  • “adjustPan”:(平移模式:当输入框不会被遮挡时,该模式没有对布局进行调整,然而当输入框将要被遮挡时,窗口就会进行平移。也就是说,该模式始终是保持输入框为可见。)该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

3.侦听软键盘的显示隐藏

有时候,借助系统本身的机制来实现主窗口的调整并非我们想要的结果,我们可能希望在软键盘显示隐藏的时候,手动的对布局进行修改,以便使软键盘弹出时更加美观。这时就需要对软键盘的显示隐藏进行侦听。 我们可以借助软键盘显示和隐藏时,对主窗口进行了重新布局这个特性来进行侦听。如果我们设置的模式为压缩模式,那么我们可以对布局的onSizeChanged函数进行跟踪,如果为平移模式,那么该函数可能不会被调用。

设置EditText控件默认不弹出软键盘的几种方法

1.在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden例如:

1
2
3
4
5
6
7
8
9
<activity android:name=".Main"                 
android:label="@string/app_name"                 
android:windowSoftInputMode="adjustUnspecified|stateHidden"                 
android:configChanges="orientation|keyboardHidden">           
<intent-filter>               
<action android:name="android.intent.action.MAIN" />               
<category android:name="android.intent.category.LAUNCHER" />           
</intent-filter>       
</activity>

2.让EditText失去焦点,使用EditText的clearFocus方法例如:

1
2
EditText edit=(EditText)findViewById(R.id.edit);          
edit.clearFocus();

3.强制隐藏Android输入法窗口例如:

1
2
3
EditText edit=(EditText)findViewById(R.id.edit);            
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);           
imm.hideSoftInputFromWindow(edit.getWindowToken(),0);

4.例:EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL);

显示和隐藏软键盘

1
2
3
4
5
6
7
8
9
10
11
12
tv.setOnClickListener(new OnClickListener() {   
@Override public void onClick(View v) {  
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
//隐藏软键盘 //  
imm.hideSoftInputFromWindow(tv.getWindowToken(), 0);   
//显示软键盘 //   
imm.showSoftInputFromInputMethod(tv.getWindowToken(), 0);   
//切换软键盘的显示与隐藏   
imm.toggleSoftInputFromWindow(tv.getWindowToken(), 0, InputMethodManager.HIDE_NOT_ALWAYS);   
//或者 // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
});

备注

  • 1,Eidtext这个控件默认是你点击了它获得焦点之后就会自动地弹出软键盘,前提是你在竖屏的时候。但横盘的时候,不会自动弹出弹出软键盘了。模拟器横屏时默认是打开了键盘的所以就算你用代码来显示软键盘也是显示不出来的,而像真实的手机(有物理键盘(硬件盘)比如G1)就不一样了。可以通过sensor来把画面横屏而并没正在的将键盘打开时就可以通过代码来显示软键盘了。
  • 2,问题在通过代码来使得软键盘显示与隐藏时可以写在某控件的onClick事件里来或者用timer来控制,若你直接在onCreate或onResume里面是不行的,从网上找来的理由说是:软件盘是要在所有view画完才能显示的。

情况一

1
2
3
4
5
6
7
8
@Override  
protected void onResume() {  
// TODO Auto-generated method stub  
super.onResume();  
InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));  
im.showSoftInput(tv, 0);  
}  
}

情况二

1
2
3
4
5
6
7
8
9
10
tv.setOnClickListener(new OnClickListener() {  
@Override  
public void onClick(View arg0) {  
InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));  
if (im.showSoftInput(tv, InputMethodManager.SHOW_FORCED)) {  
System.out.println(" return is true fullscreenmode" + im.isFullscreenMode());  
else {  
System.out.println("return is not true");  
}
}});

*自定义软键盘的Enter键*

SDK升级到1.5以后,当文本输入框(EditText及其子类)获得焦点后,会弹出系统自带的软键盘为了实现一些自定义的功能,就稍微研究了下 当layout中有多个EditText,把每个控件的android:singleLine的属性都被设置成true的情况下,软键盘的Enter键上 的文字会变成“Next”,按下后下个EditText会自动获得焦点(实现了“Next”的功能);当最后一个控件获得焦点的时候,Enter键上的文 字会变成“Done”,按下后软键盘会自动隐藏起来 把EditText的Ime Options属性设置成不同的值,Enter键上可以显示不同的文字或图案actionNone : 回车键,按下后光标到下一行actionGo : Go,actionSearch : 一个放大镜actionSend : SendactionNext : NextactionDone : Done,隐藏软键盘,即使不是最后一个文本输入框;

示例:—————————–>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<EditText 
android:text=""   
android:layout_width="fill_parent"   
android:layout_height="wrap_content"  
android:inputType="text"  
android:id="@+id/edit1"/>  
<EditText 
android:layout_width="fill_parent"  
android:layout_height="wrap_content"  
android:id="@+id/edit2"  
android:imeOptions="actionSend" //发送  
android:inputType="text|textEmailAddress"/>  
<EditText 
android:layout_width="fill_parent"  
android:layout_height="wrap_content"  
android:id="@+id/edit3"  
android:imeOptions="actionDone"  //确定  
android:inputType="number|numberSigned|numberDecimal"/>

And java 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
edit1.setOnEditorActionListener(onEditorActionListener);  
edit2.setOnEditorActionListener(onEditorActionListener);  
edit3.setOnEditorActionListener(onEditorActionListener);  
rivate OnEditorActionListener onEditorActionListener = new OnEditorActionListener() {  
     
@Override  
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
       switch(actionId){    
       case EditorInfo.IME_NULL:    
           System.out.println("null for default_content: " + v.getText() );    
           break;    
       case EditorInfo.IME_ACTION_SEND:    
           System.out.println("action send for email_content: "  + v.getText());    
           break;    
       case EditorInfo.IME_ACTION_DONE:    
           System.out.println("action done for number_content: "  + v.getText());    
           break;    
       }    
       return true;  
   }  
};