Android Activity 中阻止自动弹出系统软键盘

标签: 软键盘 Android软键盘隐藏
20人阅读 评论(1) 收藏 举报
分类:

Android Activity 中阻止自动弹出系统软键盘

有时需要在Activity中阻止自动弹出系统软键盘,比如已经自定义了输入盘,不希望系统再自动弹出软键盘,这样会同时存在两个输入键盘,可能影响用户体验。

阻止自动弹出软键盘的方式一

  1. 需设定Activity的android:windowSoftInputMode属性为 stateHidden
<activity android:name=".XXActivity" android:label="@string/app_name"
android:windowSoftInputMode="stateHidden" />
如上,需设定Activity的android:windowSoftInputMode属性为 stateHidden

扩展一下 android:windowSoftInputMode属性一共同拥有9个取值。各自是:
stateUnspecified,stateUnchanged。stateHidden,stateAlwaysHidden。stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize。adjustPan


以下内容摘自http://blog.csdn.net/zhaokaiqiang1992,未经验证。
1.stateUnspecified
中文意思是未指定状态,当我们没有设置android:windowSoftInputMode属性的时候,软件默认採用的就是这样的交互方式,系统会依据界面採取对应的软键盘的显示模式。比方。当界面上仅仅有文本和button的时候,软键盘就不会自己主动弹出。由于没有输入的必要。
2.stateUnchanged
中文的意思就是状态不改变的意思。我们应该怎么理解这句话呢?事实上非常好理解,就是说,当前界面的软键盘状态,取决于上一个界面的软键盘状态。举个样例,假如当前界面键盘是隐藏的,那么跳转之后的界面,软键盘也是隐藏的;假设当前界面是显示的,那么跳转之后的界面,软键盘也是显示状态。
3.stateHidden
顾名思义,假设我们设置了这个属性,那么键盘状态一定是隐藏的,无论上个界面什么状态。也无论当前界面有没有输入的需求,反正就是不显示。因此,我们能够设置这个属性,来控制软键盘不自己主动的弹出。
4.stateAlwaysHidden
这个属性也能够让软键盘隐藏。
5.stateVisible
设置为这个属性,能够将软键盘召唤出来,即使在界面上没有输入框的情况下也能够强制召唤出来。
6.stateAlwaysVisible
这个属性也是能够将键盘召唤出来,可是与stateVisible属性有小小的不同之处。举个样例,当我们设置为stateVisible属性,假设当前的界面键盘是显示的,当我们点击button跳转到下个界面的时候,软键盘会由于输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。可是假设我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,可是当我们再次回来的时候。软键盘是会显示出来的。
7.adjustUnspecified
设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会依据界面选择不同的模式。假设界面里面有能够滚动的控件,比方ScrowView。系统会减小能够滚动的界面的大小,从而保证即使软键盘显示出来了,也能够看到全部的内容。假设布局里面没有滚动的控件。那么软键盘可能就会盖住一些内容
8.adjustResize
这个属性表示Activity的主窗体总是会被调整大小,从而保证软键盘显示空间。
9.adjustPan
假设设置为这个属性。那么Activity的屏幕大小并不会调整来保证软键盘的空间。而是採取了第二种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的失业范围里面,从而让用户能够看到自己输入的内容。对于没有滚动控件的布局来说。这个事实上就是默认的设置,假设我们选择的位置偏下,上面的标题栏和部分控件会被顶上去。可是对于有滚动控件的布局来说。则不太一样。我们看以下的效果图。
总结:假设我们不设置”adjust…”的属性,对于没有滚动控件的布局来说,採用的是adjustPan方式,而对于有滚动控件的布局,则是採用的adjustResize方式。

阻止自动弹出软键盘的方式二

  1. 通过代码动态隐藏软键盘
//隐藏键盘
    private void HideKeyboard() {
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                InputMethodManager manager = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
                manager.hideSoftInputFromWindow(
                        InputCameraActivity.this.getCurrentFocus().getWindowToken(),
                        InputMethodManager.HIDE_NOT_ALWAYS
                );
            }
        }, 10);
    }
 // 代码放在onResume中执行

以上代码应该放在onResume中,自测在onResume中执行完隐藏键盘的逻辑,软键盘仍然弹出;造成这个问题,是因为在onResume执行时,系统键盘是不可见的,此时执行隐藏,是没有用的。所以需要延时一会儿再执行隐藏键盘的逻辑。

查看评论

启动Activity时禁止弹出软键盘

android编程时,当打开一个activity时,经常会因为内部存在editText类的组件,自动出现软键盘,影响视觉效果。 如果屏蔽软键盘,代码会比较繁杂,下面是列举了一个简单的方法。 ...
  • cbbing
  • cbbing
  • 2014-05-30 12:52:47
  • 2599

禁止进入activity自动弹出键盘

在Manifest.xml中设定activity的属性 android:windowSoftInputMode="stateHidden|stateUnchanged" 附相关属性: "stat...
  • Hknock
  • Hknock
  • 2014-01-22 17:22:03
  • 23548

android开发中防止刚进入activity时edittext获取焦点,防止自动自动弹出软键盘

刚进入activity的时候,如果布局组件有edittext的话,往往edittext会获取焦点,自动弹出软键盘,影响整个界面的视觉效果。解决方法如下: 可以在edittext的父布局结...
  • qq_21376985
  • qq_21376985
  • 2016-04-15 14:47:55
  • 3998

Android打开某个activity时自动弹出输入法键盘

最近在做一个可以让用户修改自己账户资料的activity,具体是打开后有一个EditText,然后用户可以在这里输入相关信息,但是做好后发现,进入这个activity时系统并没有自动弹出输入法键盘,于...
  • ljfrocky
  • ljfrocky
  • 2014-12-05 15:21:39
  • 4977

Activity启动后EditText是否自动弹出输入法虚拟键盘(软键盘)的问题

转自:http://blog.csdn.net/cshichao/article/details/8536961
  • wyyl1
  • wyyl1
  • 2014-08-31 17:11:58
  • 12007

[android] activity“阻止自动弹出软键盘”的方法 -尤其是对于Tab页下的!

activity 第一个获取焦点的组件是 EditText 时,开启这个activity 时就会自动弹出软键盘。 今天设计的程序不想要自动弹出,于是照了相关资料,但是尝试了半天都不好使,让本人很郁闷...
  • glen1943
  • glen1943
  • 2013-03-13 13:55:59
  • 1469

Android:关闭软键盘自动弹出的解决方案

个人觉得最有效的方法是 在 AndroidMainfest.xml中,为要隐藏软键盘的activity添加属性android:windowSoftInputMode="adjustUnspecifi...
  • sange77
  • sange77
  • 2015-07-28 11:15:17
  • 1856

进入Activity不让其自动弹出虚拟键盘

问题描述若Activity中含有EditText控件,如果没有做特别的调整,那么每次进入该Activity,EditText空间都会自动获取脚垫,然后弹出虚拟的键盘,使页面变得拥挤。Android这样...
  • liduolp
  • liduolp
  • 2015-09-16 11:29:35
  • 1449

设置Android软键盘的默认不弹出

方法一:在OnCreate()函数中,加上下面的代码getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_...
  • forwordlove
  • forwordlove
  • 2016-09-06 20:38:16
  • 5611

android 开发中进入一个activity界面软键盘自动弹出解决(布局中有edittext)

其实就是EditText 焦点问题 下面我们就来解决这个问题,开发中为了快,我当时布局中有多个EditText,就在父布局中添加 android:focusable="true" android:f...
  • SongHongJun1989
  • SongHongJun1989
  • 2017-02-09 15:48:48
  • 1256
    个人资料
    持之以恒
    等级:
    访问量: 19万+
    积分: 3305
    排名: 1万+
    最新评论