Android 软键盘 弹出,默认隐藏,强制隐藏,自动变大写等

原创 2016年02月02日 11:16:59

经常时不时的需要控制软键盘的不同状态,每次用每次查,自己总结一下所有关于Android软键盘的东西写一块。

1.代码中弹出/隐藏软键盘:

//view为接受软键盘输入的视图,SHOW_FORCED表示强制显示
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
imm.showSoftInput(view,InputMethodManager.SHOW_FORCED); //显示键盘,但是这条代码似乎执行无效果,因此可以使用toggleSoftInput来显示键盘。  
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //隐藏键盘  
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); //如果输入法在窗口上已经显示,则隐藏,反之则显示
//显示键盘
public void showSoftKeyboard() {
    InputMethodManager inputMethodManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
//隐藏键盘
public void hideSoftKeyboard() {
    InputMethodManager inputMethodManager = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(mContent.getWindowToken(), 0);
}

2.如果只是想界面初始显示时不弹出键盘可以用以下方法:

直接在xml添加一个高宽都为0dp的view,设置上属性

android:focusable="true"  
android:focusableInTouchMode="true"

或者在AndroidManifest.xml里对应的Activity添加

android:windowSoftInputMode="stateHidden"

3.有些时候即使EditText获取焦点也不想弹出键盘,就需要强制隐藏键盘。

//强制隐藏键盘,即使点击Edit也不会弹出。覆盖输入法窗口,如果需要可在edit的touch里清空这个属性
getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
//取消强制隐藏键盘
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

4.设置弹出键盘样式

设置输入格式可在EditText设置以下属性:

如果想设置只能输入数字可添加上
android:numeric="integer"

要想为加上小数
android:numeric="decimal"

最灵活的设置
android:digits="0123456789,"
意思为,可输入0-9和逗号,如果想自定义可输入的符号,只需在里面添加即可。

android:inputType属性详解:
http://blog.csdn.net/wyoeap/article/details/8048550

5.设置软键盘交互样式

有时键盘弹出需要把界面挤压到上端或直接覆盖界面。
可在AndroidManifest.xml对应的Activity里添加上这条属性:
android:windowSoftInputMode=”参数”
参数详情如下,多个参数之间可用‘|’隔开:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

6.自动将输入的小写字母转换为大写。

//自动转化为大写字母。但是转换出来的只是显示为大写字母,存的还是小写字母。

class InputLowerToUpper extends ReplacementTransformationMethod{ 
        @Override 
        protected char[] getOriginal() { 
            char[] lower = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' }; 
            return lower; 
        } 
        @Override 
        protected char[] getReplacement() { 
            char[] upper = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; 
            return upper; 
        } 
    } 
editText.setTransformationMethod(new InputLowerToUpper());

也可通过设置 android:inputType=”textCapCharacters”可行,但是就不能一块使用密码键盘了。



//下面这种方法才是真正的将输入的小写字母转换为大写字母

addressText.addTextChangedListener(new TextWatcher() { 
        @Override 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 
            // TODO Auto-generated method stub 
            addressText.removeTextChangedListener(this);//解除文字改变事件 
            addressText.setText(s.toString().toUpperCase());//转换 
            addressText.setSelection(s.toString().length());//重新设置光标位置 
            addressText.addTextChangedListener(this);//重新绑 
//            licensePlateNumber = addressText.getText().toString().trim(); 
        } 
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
            // TODO Auto-generated method stub 
        } 
        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub  
        } 
    });
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/xiaoxiaohude/article/details/50511441

用Visual C++开发数据库应用程序

用Visual C++开发数据库应用程序EMAIL:zzh1415@21cn.com1、 概述1、1 Visual C++开发数据库技术的特点Visual C++提供了多种多样的数据库访问技术——OD...
  • zzh
  • zzh
  • 2000-08-09 17:04:00
  • 986

彻底搞定Android开发中软键盘的常见问题

软键盘显示的原理       软件盘的本质是什么?软键盘其实是一个Dialog。        InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Win...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016-06-02 15:11:26
  • 59193

让Android软键盘默认进入英文键盘

今天在做一个功能的 时候,需要输入法软键盘弹出后,需要进入英文输入界面。 可以通过设置EditText的输入类型为EMAIL来实现。     //将输入法切换到英文     edit.setIn...
  • yangpeng98
  • yangpeng98
  • 2014-01-26 16:57:48
  • 6872

android edittext只能输入字母和数字,默认弹出英文输入法 。

/*          * 限制只能输入字母和数字,默认弹出英文输入法          */         pwdEditText.setKeyListener(new DigitsKeyL...
  • rongwenbin
  • rongwenbin
  • 2015-12-29 16:35:09
  • 2259

Adroid EditText限制输入数字与英文默认弹出数字键盘

Adroid限制输入数字与英文默认弹出数字键盘 终于要写博客了,以前总觉得技术大牛才能写博客,后面想想,分享个人想法与技术探讨而写博客也是一种不错的交流方式。今天讲讲我在项目中遇到的一个实际需求,也...
  • u013210543
  • u013210543
  • 2015-05-20 11:31:56
  • 6195

android 设置EditText只能输入大写字母,Fragment的软键盘输入模式

android 设置EditText只能输入大写字母 editReceiverId.setTransformationMethod(new ReplacementTransformationMeth...
  • wuqilianga
  • wuqilianga
  • 2017-06-24 17:44:45
  • 887

Android软键盘的弹出和隐藏

Android系统键盘有时挺让人繁琐,这个方法是弹出软键盘的方法,后续会写隐藏软键盘的方法 InputMethodManager imm = (InputMethodManager) getSyste...
  • guochengabcd
  • guochengabcd
  • 2017-03-24 09:54:28
  • 2872

android fragment 切换时隐藏软键盘

今天,项目遇到这个问题,在网上找了好久,都不理想,好多都是copy的。结果在大神的帮助下完成,代码如下:public void hideIputKeyboard(final Context cont...
  • JimTrency
  • JimTrency
  • 2016-09-28 14:12:25
  • 2566

Android软键盘(六)如何监听到软件盘显示与隐藏的事件

有时候我们需要监听软件盘隐藏事件。但是官方并没有提供相关的监听回调,这时我们就需要通过计算布局来判断软键盘的关闭事件了。思路与上一篇文章Android软键盘(五)如何判断软键盘是否显示相似。 看效果图...
  • sinat_31311947
  • sinat_31311947
  • 2016-12-28 22:01:21
  • 7565

Android判断软键盘弹出并隐藏的简单完美解决方案

最近项目中有一个编辑框,下面是个ListView。在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击。这样的体验效果很不好。于是便想在滑动或单击item时判...
  • Thare_Lam
  • Thare_Lam
  • 2015-10-14 20:00:54
  • 2363
收藏助手
不良信息举报
您举报文章:Android 软键盘 弹出,默认隐藏,强制隐藏,自动变大写等
举报原因:
原因补充:

(最多只允许输入30个字)