今天编程碰到了一个问题:有一款平板,打开一个有EditText的Activity会默认弹出输入法。为了解决这个问题就深入研究了下android中焦点Focus和弹出输入法的问题。在网上看了些例子都不够全面,在这里全面总结下。
一:EditText为什么会默认弹出输入法?
同样的代码,碰到有EditText控件的界面时有的机子会弹出输入法,有的机子不会弹出。不好意思,这问题我也一头雾水,谁知道可以告诉我,否则我就把这个问题留下来,以后研究android源码时再搞个清楚。但是...我有解决方案。
二:默认弹出和默认关闭输入法的解决方案。
1.默认关闭,不至于进入Activity就打开输入法,影响界面美观。
①在布局文件中,在EditText前面放置一个看不到的LinearLayout,让他率先获取焦点:
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
②方法二:先看一个属性android:inputType:指定输入法的类型,int类型,可以用|选择多个。取值可以参考:android.text.InputType类。取值包括:text,textUri,
phone,number,等.
Android SDK中有这么一句话“If
the given content type is TYPE_NULL
then a soft keyboard will not be displayed for this text view”,
先将EditText的InputType改变为TYPE_NULL,输入法就不会弹出.然后再设置监听,再重新设置它的InputType.
editText.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int inType = editText.getInputType(); // backup the input type
editText.setInputType(InputType.TYPE_NULL); // disable soft input
editText.onTouchEvent(event); // call native handler
editText.setInputType(inType); // restore input type
return true;
}
});
2.默认弹出。有时候按照需求可能要求默认弹出输入法。方案如下:
EditText titleInput = (EditText) findViewById(R.id.create_edit_title);
titleInput.setFocusable(true);
titleInput.requestFocus();
onFocusChange(titleInput.isFocused());
private void onFocusChange(boolean hasFocus)
{
final boolean isFocus = hasFocus;
(new Handler()).postDelayed(new Runnable() {
public void run() {
InputMethodManager imm = (InputMethodManager)
titleInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(isFocus)
{
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
else
{
imm.hideSoftInputFromWindow(titleInput.getWindowToken(),0);
}
}
}, 100);
}
我觉得因为在Android的主线程中对UI的操作无效,所以必须在Handler中实现弹出输入法的操作。
三。关于焦点和输入法的个人理解
获取焦点是获取焦点,弹输入法是弹输入法。获取焦点后并不一定会弹出输入法,在网上搜了一圈,主流回答是“还有就是已开启界面就是focus的text的话有可能也是不行的,UI渲染是需要时间的”......
由于对源码不懂,我对这一点也没有个全面的认识。只能将焦点和输入法分成两块来处理。焦点的打开和关闭特别简单。
焦点的获取:
titleInput.setFocusable(true);
titleInput.requestFocus();
焦点的取消:
titleInput.setFocusable(false);
四。关于经常调用的处理软键盘的函数如下:<转载>
1、打开输入法窗口:
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// 接受软键盘输入的编辑文本或其它视图
imm.showSoftInput(submitBt,InputMethodManager.SHOW_FORCED);
2、关闭出入法窗口
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(OpeListActivity.this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
//接受软键盘输入的编辑文本或其它视图
inputMethodManager
.showSoftInput(submitBt,InputMethodManager.SHOW_FORCED);
3、如果输入法打开则关闭,如果没打开则打开
InputMethodManager m=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
4、获取输入法打开的状态
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
boolean isOpen=imm.isActive();
isOpen若返回true,则表示输入法打开
分享到:
相关推荐
android 输入法键盘弹出与否判断和输入法键盘弹出时将界面滚动到指定位置demo
android 全屏弹出dialog,底部弹入,底部弹出+弹出dialog输入法,实现了从底部弹出的输入法。自动适配手机屏幕
经常用到的输入法获取焦点后,输入法键盘弹出,布局上移
1.调用显示系统默认的输入法 方法一、 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(m_receiverView(接受软键盘输入的视图(View)),...
并且监听输入法随输入框消失而消失在做Android app时候有这样的业务场景:在评论页面,点击评论键弹起输入框,要求如下:1、点击,输入框获得焦点,键盘弹起。用户可以评论 2、修改手机键盘回车键为 发送 字样,...
文章地址http://blog.csdn.net/kyrinleo/article/details/17101943 对应的源码 Android没有输入焦点类控件的输入法调用
下面小编就为大家分享一篇Android EditText默认不弹出输入法的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Android Studio模拟器 AVD intelx86 中文莱姆输入法.apk 安装包 x86模拟器中文输入法,x86模拟器中文输入法x86模拟器中文输入法x86模拟器中文输入法
基本就是结合layout中ScrollView视图和AndroidManifest.xml中activity中的android:windowSoftInputMode属性配置实现; 2.要了解android:windowSoftInputMode相应的可以配置项: activity主窗口与软键盘的交互模式,...
主要介绍了Android中自定义的dialog中的EditText无法弹出输入法解决方案,需要的朋友可以参考下
通过重写onLayout方法,判断软键盘是否弹出。判断到键盘是否弹出后,就可以做自己想做的事情了。
一款功能强大的输入法,集合 “广东话、拼音、仓颉、速成”四种常用中文输入法,以及英文、数字及符号键盘,一按独立切换键即可变更。同一键盘可作中英文输入,无需切换,支持联想字功能,融合英汉字典。 繁体中文...
android 手机 中文输入法 apk
android自带的输入法,在软键盘上实现焦点移动,支持上下左右按键,并支持回车输入,文档以LatinIME为例
android输入法android输入法android输入法android输入法
此功能类似于QQ或者微信的输入框,当输入框获取焦点时,输入法弹出,输入框自动上移并且正好保持在输入法的上面.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
开发语言:java 开发环境:android studio ...C++代码,cmake编译通过,整个工程可以编译成一个输入法apk,安装后需要在设置里添加此输入法,再选择使用即可。 适合人群:C++/JAVA开发者,对有输入法定制需求的人群
监听安卓输入法的弹起和隐藏,适配到2.3