当前位置:首页 » 安卓系统 » android键盘状态

android键盘状态

发布时间: 2024-10-29 17:35:04

‘壹’ 【转】Android软键盘的全面解析

软键盘其实是一个Dialog

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

其实这段话我们经常在各种软键盘博客所看到,但是大家并不知道Android是怎么为我们创建的这个Dialog,所以我先带大家来看下软键盘生成这块的源码,了解软键盘的生成流程。

我们先来看一下InputMethodService的继承关系:

因为InputMethodService属于服务,接下来我们先看一下服务的入口onCreate()方法:

通过上面的分析,我们怀疑这里的SoftInputWindow是软键盘弹出创建的Dialog对象,下面我们看下SoftInputWindow的源码。

看到这里大家就能明白了,为什么说软键盘就是一个Dialog。而且这里通过设置Gravity.BOTTOM来控制当前Dialog在Window中的位置。

在Android中,可以通过给Activity设置 windowSoftInputMode 这个属性来控制软键盘与Activity的主窗口的交互方式。

Activity 的主窗口与包含屏幕软键盘的窗口的交互方式,该属性的设置影响两个方面:

该设置必须是下面所列的值之一,或者是一个“state…”值加上一个“adjust…”值的组合,在任一组中设置多个值(例如,多个“state…”值)都会产生未定义结果。各值之间使用垂直条 (|) 分隔。

下面将通过例子来介绍 adjustNoting adjustUnspecified adjustResize adjustPan 在软键盘弹出的区别:

非滚动布局xml

点击最下面的EditText12

滚动布局xml

通过上面的例子,我们可以完全理解adjust系列的各个参数的作用。而软键盘的显示和隐藏这里面需要并不多,而且内容并不算复杂,大家回去自己尝试下就可以。

在日常开发中,如果需要将软键盘的Enter键更改为其他键,可以设置其 android:imeOptions 属性,这个属性可以控制软键盘的Enter键,以及横屏情况下的软键盘显示状态。

该设置必须是下面所列的值之一,或者是一个“action…”值加上一个“flag…”值的组合,在action…组中设置多个值(例如,多个“action…”值)都会产生未定义结果,而flag….可以设置多个。各值之间使用垂直条 (|) 分隔

控制软键盘上的Enter键

横屏下控制软键盘

总结一下:
这里大部分的属性,已经介绍完毕,如果英语好的同学,可以去看下官方文档,可以更好的理解,并且本文以搜狗输入法为实践,可能其他的输入法与其显示的不同,但是功能应该都是一样的。

而如果要在横屏状态不希望软键盘全屏显示最好是将flagNoFullscreen和flagNoExtractUi结合使用,这样体验上会更好

android:imeOptions=”flagNoFullscreen|flagNoExtractUi”

Android官网的Api

如果需要监听软键盘的右下角的按键,需要为EditText设置setOnEditorActionListener()监听:

上面的方式,只是展示了如何监听各个按键的方法,如果需要消费事件,则需要return true。

(1)第一次写这么长的博客,感觉会有一些不足,各位看官如果有不合理的地方,或者有误的地方请直接指出。

(2)本来想整理成一个Demo的,后来简单看来下,该有的几乎都贴出来了,有需要的可以按需复制就可以。

(3)写完这篇博客之后,感觉博客干货还是不多,所以定位这篇文章算是总结性质加上实际案例性质的博客。

(4)Android软键盘的总结就差不多到这里,希望各位看官,如果看到这里有收获,就点点赞,灌灌水,顶一波,这样博主才有写下去的动力。

(5)感谢小辉同学的校验,调整了文章中不通顺的地方。

1.彻底搞定Android开发中软键盘的常见问题
http://blog.csdn.net/mynameishuangshuai/article/details/51567357

2.Android UI(EditText)详解
http://blog.csdn.net/qq_28057577/article/details/51919965?locationNum=12&fps=1

3.微信软键盘布局闪动问题
https://blog.dreamtobe.cn/2015/09/01/keyboard-panel-switch/

‘贰’ 如何设置Android软键盘的默认不弹出

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

在开发Anroid的时候,当你打开一个界面的时候,屏幕的焦点会自动停留在第一个EditText中,Android的软键盘默认会自动弹出,用户第一眼连界面都没有看清楚,软键盘就弹出来了,这就影响到了用户体验,我们需要设置打开界面的时候,当EditText获取焦点的时候,不弹出软键盘,其实也很简单,代码如下:

// 默认软键盘不弹出 getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

在OnCreate()函数中,加上即可,OK,搞定。

‘叁’ android 软键盘弹出 怎么把布局顶上去

解决办法:
在mainfest.xml中,在和导航栏相关的activity中加:
<activity
android:name=".filing.MainActivity"
android:windowSoftInputMode="adjustResize|stateHidden"
/>
windowSoftInputMode 属性解释:
活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情:
1.软键盘的状态——是否它是隐藏或显示——当活动(Activity)成为用户关注的焦点。

2.活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被
软键盘覆盖时它的内容的当前焦点是可见的。

在这设置的值(除"stateUnspecified"和"adjustUnspecified"以外)将覆盖在主题中设置的值
它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。

各值的含义:

【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置

【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

【C】stateHidden:用户选择activity时,软键盘总是被隐藏

【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

【E】stateVisible:软键盘通常是可见的

【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

‘肆’ 平板电脑显示Android键盘(AOSP)已停止运行。该怎么办啊

您好,处理方式:
1,按下述操作:进入 设置---语言和输入法---在“键盘和输入法”中点击“默认”(黑体字)---点击“中文拼音--谷歌拼音输入法”。此操作是将"默认"更改为“中文拼音--谷歌拼音输入法”。
2,进入中文输入程序(如 搜索),即出现中文拼音键盘。
3,注意:中文输入键盘底部中间位置有一语言种类提示条(如显示“中文”),其左侧的一个地球样图案的按钮,千万别按,一按就出现“抱歉,Android 键盘已经关闭”的提示,并且键盘消失。

热点内容
怎么把服务器的ip固定了 发布:2025-01-12 03:55:42 浏览:578
php服务器开发 发布:2025-01-12 03:55:35 浏览:672
软件自制编程 发布:2025-01-12 03:54:00 浏览:534
j2ee和java的区别 发布:2025-01-12 03:42:44 浏览:581
android6小米 发布:2025-01-12 03:38:35 浏览:85
redis与数据库 发布:2025-01-12 03:20:21 浏览:211
怎么升级安卓100 发布:2025-01-12 03:19:37 浏览:516
c语言倒数 发布:2025-01-12 03:14:37 浏览:929
如何免费激活移动电话卡安卓 发布:2025-01-12 03:10:27 浏览:89
2020凯越精英配置什么样 发布:2025-01-12 03:08:02 浏览:685