首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android软键盘的用法小结

2013-11-08 
android软键盘的用法总结??????????????? category android:nameandroid.intent.category.LAUNCHER /

android软键盘的用法总结
??????????????? <category android:name="android.intent.category.LAUNCHER" />
??????????? </intent-filter>
??????? </activity>
方法二:
让EditText失去焦点,使用EditText的clearFocus方法
例如:EditText edit=(EditText)findViewById(R.id.edit);
?????????? edit.clearFocus();
方法三:
强制隐藏Android输入法窗口
例如:EditText edit=(EditText)findViewById(R.id.edit);?
?????????? InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
?????????? imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
5.EditText始终不弹出软件键盘
例:EditText edit=(EditText)findViewById(R.id.edit);
?????? edit.setInputType(InputType.TYPE_NULL);


在代码中实现软键盘隐藏\显示
1、绑定软键盘到EditText
??????????? edit.setFocusable(true);?
??????????? edit.setFocusableInTouchMode(true);?
??????????? edit.requestFocus();?
??????????? InputMethodManager inputManager = (InputMethodManager)edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);?
??????????? inputManager.showSoftInput(edit, 0);?
2、去除软键盘显示
?????????? editMsgView.setText("");?
?????????? editMsgView.clearFocus();?
??????????? //close InputMethodManager?
??????????? InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);??
??????????? imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);

3、EditText始终不弹出软件键盘
?EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL);
?或者
?InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);????
?
  ?if(imm.isActive()){?? //这里可以判断也可以不判断?
?
    imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0 );????
?
  ?}??
4、在设置软键盘弹出属性界面加载后,软键盘不能弹出,不能弹出软键盘的主要原因是Android程序未将屏幕绘制完成,所以延迟一定时间,弹出软键盘
?方法A;
?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(0, 1000);?
?????????? ? }?
??????? ?}?
?方法B;
?Timer timer = new Timer();?
?timer.schedule(new TimerTask() {?
?? ? @Override?
??? ?public void run() {?
??????? ?InputMethodManager m = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);?
??????? ?m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);?
??? ?}?
?}, 300);?

?


?显示和隐藏软键盘
?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画完才能显示的。第一种情况:
Java代码
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
im.showSoftInput(tv, 0);
}
}
第二种情况:
Java代码
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
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”);
}}});
3,自定义软键盘的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 : Send
actionNext : Next
actionDone : Done,隐藏软键盘,即使不是最后一个文本输入框

示例:

<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"/>

//--------------------------------------------------------------------------------------------------

? edit1.setOnEditorActionListener(onEditorActionListener);
??edit2.setOnEditorActionListener(onEditorActionListener);
??edit3.setOnEditorActionListener(onEditorActionListener);

private 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;
??? }
??};

?

?

?

热点排行