位置: 编程技术 - 正文

Android软键盘的隐藏显示研究(android键盘aosp)

编辑:rootadmin
Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入。 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少?我们能否在应用程序中进行自定义的控制?这些是本文要讨论的重点。

推荐整理分享Android软键盘的隐藏显示研究(android键盘aosp),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:键盘操作安卓,安卓键盘app,安卓键盘键值,安卓键盘键值,安卓软键盘,安卓软键盘,android 键盘,android 键盘,内容如对您有帮助,希望把文章链接给更多的朋友!

一、软键盘显示的原理 软件盘的本质是什么?软键盘其实是一个Dialog! InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或者全屏显示。 二、活动主窗口调整 android定义了一个属性,名字为windowSoftInputMode, 用它可以让程序可以控制活动主窗口调整的方式。我们可以在AndroidManifet.xml中对Activity进行设置。如:android:windowSoftInputMode="stateUnchanged|adjustPan" 该属性可选的&#;有两部分,一部分为软键盘的状态控制,另一部分是活动主窗口的调整。前一部分本文不做讨论,请读者自行查阅android文档。 模式一,压缩模式 windowSoftInputMode的&#;如果设置为adjustResize,那么该Activity主窗口总是被调整大小以便留出软键盘的空间。我们通过一段代码来测试一下,当我们设置了该属性后,弹出输入法时,系统做了什么。 重写Layout布局:

我们的布局设置为:

AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize" 运行程序,点击文本框,查看调试信息: E/onMeasure 6(): =>onMeasure called! widthMeasureSpec=, heightMeasureSpec = E/onMeasure 7(): =>onMeasure called! widthMeasureSpec=, heightMeasureSpec = E/onSizeChanged 8(): =>onSizeChanged called! w=,h=,oldw=,oldh= E/onLayout 9(): =>OnLayout called! l=0, t=0,r=,b= 从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。 实际上,当设置为adjustResize后,软键盘弹出时,要对主窗口布局重新进行measure和layout,而在layout时,发现窗口的大小发生的变化,因此调用了onSizeChanged。 从下图的运行结果我们也可以看出,原本在下方的TextView被顶到了输入法的上方。

Android软键盘的隐藏显示研究(android键盘aosp)

模式二,平移模式 windowSoftInputMode的&#;如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。 上面的例子中,我们将AndroidManifest.xml的属性进行更改:android: windowSoftInputMode = "adjustPan" 重新运行,并点击文本框,查看调试信息: E/onMeasure 6(): =>onMeasure called! widthMeasureSpec=, heightMeasureSpec= E/onMeasure 7(): =>onMeasure called! widthMeasureSpec=, heightMeasureSpec= E/onLayout 8(): =>OnLayout called! l=0, t=0,r=,b= 我们看到:系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用,这说明输入法弹出前后并没有改变原有布局的大小。 从下图的运行结果我们可以看到,下方的TextView并没有被顶到输入法上方。

事实上,当输入框不会被遮挡时,该模式没有对布局进行调整,然而当输入框将要被遮挡时,窗口就会进行平移。也就是说,该模式始终是保持输入框为可见。如下图,整个窗口,包括标题栏均被上移,以保证文本框可见。

模式三 自动模式 当属性windowSoftInputMode被设置为adjustUspecified时,它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。 也就是说,系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚动。

三、侦听软键盘的显示隐藏 有时候,借助系统本身的机制来实现主窗口的调整并非我们想要的结果,我们可能希望在软键盘显示隐藏的时候,手动的对布局进行修改,以便使软键盘弹出时更加美观。这时就需要对软键盘的显示隐藏进行侦听。 直接对软键盘的显示隐藏侦听的方法本人没有找到,如果哪位找到的方法请务必告诉本人一声。还有本方法针对压缩模式,平移模式不一定有效。 我们可以借助软键盘显示和隐藏时,对主窗口进行了重新布局这个特性来进行侦听。如果我们设置的模式为压缩模式,那么我们可以对布局的onSizeChanged函数进行跟踪,如果为平移模式,那么该函数可能不会被调用。 我们可以重写根布局,因为根布局的高度一般情况下是不发生变化的。 假设跟布局为线性布局,模式为压缩模式,我们写一个例子,当输入法弹出时隐藏某个view,输入法隐藏时显示某个view。

在我们的Activity中,通过如下方法调用:

这里特别需要注意的是,不能直接在OnResizeListener中对要改变的View进行更改,因为OnSizeChanged函数实际上是运行在View的layout方法中,如果直接在onSizeChange中改变view的显示属性,那么很可能需要重新调用layout方法才能显示正确。然而我们的方法又是在layout中调用的,因此会出现错误。因此我们在例子中采用了Handler的方法。

主题推荐android应用程序操作系统interface触摸屏

Android中实现上下左右都可滑动的ScrollView importjava.util.List;importandroid.content.Context;importandroid.graphics.Rect;importandroid.util.AttributeSet;importandroid.view.FocusFinder;importandroid.view.KeyEvent;importandroid.view.MotionEvent

Android GridView属性集合 GridView的一些特殊属性:1.android:numColumns=auto_fit//GridView的列数设置为自动2.android:columnWidth=dp//每列的宽度,也就是Item的宽度3.android:stretchMode=columnWidth//

《疯狂Android讲义》 《疯狂Android讲义》移动互联网已经成为当今世界发展最快、市场潜力最大、前景最诱人的业务,而Android则是移动互联网上市场占有率最高的平台。本书

标签: android键盘aosp

本文链接地址:https://www.jiuchutong.com/biancheng/386013.html 转载请保留说明!

上一篇:Android中View转换为Bitmap及getDrawingCache=null的解决方法(android view类)

下一篇:Android中实现上下左右都可滑动的ScrollView(在android)

  • 小规模纳税人转一般纳税人
  • 湖南税务申报期限2023年1月
  • 一般纳税人的计税方式是什么
  • 车船税规定怎么缴纳
  • 计提坏账准备的做法体现了
  • 劳务公司开出的工程服务费专用发票怎么计费
  • 买入空调会计分录
  • 核算科目拨出专票怎么弄
  • 建筑施工企业销售费用包括哪些
  • 按简易办法计税销售额税率
  • 消防设施安装费包括哪些
  • 开票确定收入分录
  • 挂靠人员帮外单位人员缴纳社保如何做账
  • 租房提前退租违约金国家标准
  • 技术变动成本是指
  • 对方增值税发票丢失怎么办
  • 供电局开具增值发票
  • 建设单位增值税抵扣
  • 收付实现制与权责发生制的区别
  • 费用类有什么科目
  • 增值税发票国家收几个点的钱
  • 资管公司如何缴纳流转税?
  • 以前年度的费用可以入在当年吗?
  • 现金流量表的编制原则为( ),是( )的概念
  • word文档打印时不打印批注
  • 我们无法创建新的分区,也找不到现有的分区 贴吧
  • 公司纳税高说明什么
  • 工会经费是不是应付职工薪酬
  • php随机ua
  • 栗耳簇舌巨嘴鸟,巴西潘塔纳尔保护区里 (© Ana Gram/Shutterstock)
  • key是什么文档
  • 退休返聘人员如何辞职
  • 红字发票负数要怎么抵掉
  • 公众号 企业
  • 位于Praprotno村之上的圣托马斯教堂 (© Guy Edwardes/Minden Pictures)
  • 全局函数使用
  • 出口退税需要提供什么
  • 发票认证相符什么意思
  • php新手入门教程
  • 带息应收票据账务处理分录
  • python中列表清空
  • 以前年度损益调整借贷方向
  • 支票小写金额前的羊
  • 季度报税有利润必须要报交所得税吗
  • 免缴纳的增值税怎么做账
  • 织梦怎么改网站主页
  • 应税销售额税率
  • 房地产业具体怎么做
  • 金蝶软件怎么录入发票号
  • 税务怎么认定虚列工资
  • 待报解预算收入是什么
  • 公司购车需要什么材料
  • 简易计税的增值税税率
  • 银行贷款是应付账款吗
  • 机会成本的特点有()
  • 年末结转步骤
  • 预收款开票后如何做账
  • 已抵扣的进项税额转出会计分录账务处理
  • 分期收款销售的会计与纳税处理
  • 委托加工合同如何签订
  • 工程未竣工预付款怎么办
  • 本月的费用
  • 企业大额融资需要什么资料
  • win8换win7详细过程
  • win8.1所有程序在哪里
  • xp系统和2003系统的异同
  • centos virbr0
  • linux怎么用u盘传输文件
  • windowsxp服务在哪里
  • linux中的rpm什么意思
  • 工商网银安装
  • win10按prtsc没反应
  • css划动
  • js 仿真
  • javascript toggle
  • 重庆网上税务局个人怎么绑定企业账户
  • 没有交税,个人税可以低房子利息嘛
  • 税务 信息
  • 扣缴个人所得税客户端操作流程
  • 数码产品关税多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设