android Popupwindow 遇到软键盘时,出现位置发生上移

android Popupwindow 遇到软键盘时,出现位置发生上移,第1张

在AndroidManifest中添加

<activity android:name="testActivity"

android:windowSoftInputMode="adjustPan">

设置属性为android:windowSoftInputMode="adjustResize"即可自动调整高度。

属性stateVisible表示默认显示输入法键盘,其他属性见:android:windowSoftInputMode

虚拟键盘是一种显示与输入结合的产品,先要显示出键盘,才能进行信息输入。诸如手机等手持设备,受屏幕小的局限,使得虚拟键盘的键位密集,键格窄小,最终导致寻键困难,击键准确性不高,用户想要实现盲打更是无从谈起。下面是我收集整理的手机虚拟键盘介绍,欢迎阅读。

手机虚拟键盘是什么

手机虚拟键盘是指用于全触摸手机的虚拟于屏幕的按键虚拟键盘,可直接把触摸屏上的虚拟键盘当实质键盘使用。手机虚拟键盘为一种以CCITT的标准键,结合多个功能键组成实际键盘及键值表,产生虚拟键盘,以改善数据键入的方法。

手机虚拟键盘至少包含以下步骤、依据预设的键盘状态值显示对应的虚拟键;判断是否有实际键被按下,若被按下键为CCITT标准键其中之一时,查询键值表以得到键值;然后以预设的键盘状态值及键值,查询键值表以得到虚拟键值;若虚拟键值为虚拟键盘切换键则依据虚拟键盘切换键的键值改变键盘状态值并呼叫键盘显示模组以显示对应的虚拟键盘,并且去除键值;否则,呼叫键盘显示模组以显示该虚拟键值。

手机虚拟键盘怎么打开

谷歌开放安卓给移动智能 *** 作系统迎来了一次大的发展,不过也同样带来一个困扰谷歌很久的问题、碎片化。由于各手机厂商对Android系统有较大的自由定制权利,很多第三方ROM的 *** 作习惯和交互开始向标杆iOS学习,这也出现了后来百花齐放的ROM市场。

不过从Android后续版本的升级来看,谷歌也从一定程度上收紧一部分权限,而虚拟按键也是一次尝试与改变。采用虚拟按键后的Android手机会在屏幕出现一个双下巴,影响视觉美观,而且虚拟按键在使用交互上也没有物理按键的那种踏实感。

在后续的Android版本中,谷歌也开始优化虚拟按键的美观性,比如做成背景透明,另外为了保持UI的统一性,谷歌开放虚拟按键的API接口给开发者,让开发者在不同的应用中可以自由调用虚拟按键,比如在视频播放时可以隐藏虚拟按键来达到更好的视觉效果。

不得不说,目前应用虚拟按键的安卓手机在整体外形效果,采用虚拟按键的手机,厂商可以做到更高的屏占比,使得整机的外形看起来更加协调。采用物理按键或者实体按键的手机,在机身结构设计时需要在机身下方留出空间位置,这在手机这种寸土寸金的地方实在是浪费,同时,以往采用实体按键的手机存在的漏光现象可以轻松解决掉。

说了那么多虚拟按键的优点,其实缺点也很明显,首先是要额外占据一部分屏幕区域,导致屏幕显示面积变小,部分应用也会产生压缩变形。当然虚拟按键区域是可以隐藏的,但下次要使用时就会多一个上划呼出的 *** 作,相比实体按键略有不便。

手机虚拟键盘简介

虚拟键盘用在PAD 和智能手机上时,可方便地进行电子邮件收发、文字处理及电子表格制作,用户可以将笔记本电脑和桌面机留在家里了。虚拟键盘的适用性技术对用户手指运动加以研究,对键盘击打动作进行解码和记录。由于虚拟键盘是光投照所形成的影像,不使用时会完全消失。谷歌已于2013年1月向美国专利商标局提交新专利申请,该专利指向激光投射键盘,可以将用户身体变成触控屏。

手机虚拟键盘工作原理

1、模板创建(投影模块)

将所需界面模板投影至相邻的界面表面。该模块由经过特殊设计的高效全息光学原件照明产生,元件带有红色[2]二极管激光器。

2、参考面照明(微照明模块TM)

上一步已产生了红外线光照平面,且与界面表面平行。光线照在表面上几毫米处,用户是无法看到的。当用户碰触到界面表面上的按键位置时,按键边上的平面就会反射出光线,直接传到传感器模块上。

3、映射对应坐标(传感器模块)

用户与界面表面互动所反射出的光线传至红外线滤光片,并反射至传感器模块内的CMOS影像。传感器芯片(虚拟接口处理核TM)内含定制的硬件,能够实时确定反射光的位置 。处理核可同步跟踪多次反射,因此能够同时处理多重按键并重叠光标控制输入。

手机虚拟键盘发展过程

一、键盘显示争屏,视觉透明化理念轻松解决 在我们的触屏上,我们经常会遇到虚拟键盘面积过大,导致过多地覆盖背景,影响我们 *** 作可视性的问题。那么,解决该问题的根本方法是什么呢?目前我们已经用到了键盘透明化这个技术,它能够很好的解决键盘与背景界面视觉争屏的矛盾,释放出交互空间,让我们不用担心触屏的面积会影响到我们界面背景。

我们都知道,可透视键盘不是新技术,特别对于专业人员来说,也没有技术难度。但是这并不意味着我们就能将这一技术运用自如。现在我们能看到的透明化键盘技术方案,都是在背景上直接叠加透明化处理的键盘,虽然解决了原有的问题,但是也导致我们使用的时候,出现颜色混搭,视觉舒适性差的新问题,让人看着不方便。 因此,透明化键盘要真正让人接受。首先,要满足我们对背景画面美观的要求,尽量减少键盘界面对背景画面的影响,最大程度的保全背景画面信息;其次,要继续提升透明键盘的人性化融合度,多余显示的键格虚影是必须除去的,按键字符也可以通过镂空、亮度增减或间歇显示等手段进行隐饰处理。

二、解决键格窄小密集 只需布局全屏化

键盘受屏幕大小的限制,它的使用区域有限,导致了键盘每个字符的位置很密集,而且用手点击触屏的时候不能像实体的键盘那样通过手指感觉出来键盘每个符号的位置,让我们找字符的时候很困难……这是在我们用的触屏手机和平板电脑上一直存在这样的问题。如果连最基本的准确点击想要的字符都困难,就更不要说盲打了。而要改变这些问题,我们就必须增大键盘的面积,扩展它布局。同时,在键盘透明化的基础上,我们可以轻易的实现键盘全屏布局,让我们拥有有宽大舒适的键格布局。

全屏键盘可以充分利用好触屏的边角定位。我们用手点击触屏的时候,虽然没有实体键盘的触感,但可以通过手指感觉出来触屏边角确定键盘每个符号的位置。就像图中看到的那样,像龟背一样的键格,它的外围键格可实现边角定位,而且键盘的面积也可以适当缩小,中心区域键格非常大,这样的布局,能让键格定位同样容易、准确。因此,龟背格布局实现100%盲打是一件很容易的事情。为了更好地利用触屏定位,增强按键的准确性,在触屏周边的区域设计一系列的凹凸点也是比较合适的方案。使用全屏大键格键盘,虽然方便但是它是有 *** 作要求的,如果我们的用户没有很好的掌握键格布局情况,那么这样的 *** 作,只会让用户感到更加麻烦和头痛,更不要说去轻松 *** 作了。

总体来看,虚拟键盘的全屏化其实很容易实现,在目前的硬件设备上就能够得到很好的应用,因此我们可以得出,虚拟键盘全屏化是可以实现的键盘发展的一个好方向。

三、界面切换频繁 *** 作立体化来解决

键格增大了,界面增多了,用户的界面切换动作也会越来越多。这样的情况,就会让以后我们简单的输入“回家吃饭吧”这样简单的文字,都会出现“切换 *** 作—→击键输入—→再切换 *** 作—→击键输入”的麻烦状况。切换动作如此繁琐,让我们的输入过程变得十分痛苦,不仅影响我们的速度,也让我们普通消费者觉得触屏成了一件技术活。

但是,如果我们不使用单一作业平台,而是使用两个独立 *** 作平台的话,在技术就能实现同时完成两项 *** 作的。从专业的角度上来说,将界面的切换 *** 作和击键 *** 作分别分配到两个输入平台上就能够实现切换和击键输入的同步并行,这样我们一秒钟就能实现两种任务的完成。

简单来说, *** 作立体化就是将虚拟键盘的一些触屏 *** 作迁移到触屏以外的输入平台上,通过触屏和外部输入平台,同时完成输入过程。就像吃东西一样,猪只会用嘴巴进食是多么的低能粗蛮,而我们人类用手拿着吃就轻松文雅多了。输入过程中也是这样,切换动作转移到触屏之外的另一个输入平台上进行,触屏只负责击键输入,两个平台一起工作就能够实现切换 *** 作与击键输入同步完成。

自定义键盘整个过程如下:

1第一步,根据你的需求,需要定制怎样的键盘,需要几行几列,准备好键盘按键的背景,键盘的尺寸,在res文件下,新建一个xml文件,下面放字母、数字、标点符号键盘的布局文件,我的需求是这样的:

可以看到上述的键盘需要美工做的有几张:字母和数字的按键的基本背景(需要圆角)、删除按键、切换大小写的图标、点击隐藏键盘的下拉按键,设置键盘的布局为白色就可以大致实现上述的效果。这里我在写键盘文件的时候遇到几个难点,分享如下:

A按键之间的空隙和键盘整体高度,需要不断的调整,不可能一下子就可以布置好的,特别字母键盘里的删除键,高度是两个按键,所以需要反复调试。

B为了解决点击下拉按钮隐藏键盘的功能:放弃原先点击下拉按钮,隐藏整个键盘的布局的方案,而改用在键盘文件中再加一整行,只有一个按键,就是done,完成按钮,这是系统定义好的完成功能,code值为:  -3。(所以我们发现很多系统自动的比如切换大小写、删除功能、空格功能,都是已经定义好了code值,只需要找到对应的含义,直接定义使用就可以了。)

我们目前的项目是采用单 Activity 多 Fragment 的架构模式, AndroidManifestxml 内 MainActivity 的配置如下所示。

stateHidden

状态隐藏,如果我们设置了这个属性,键盘状态就一定是隐藏的,不管上个界面是什么状态,也不管当前界面有没有输入的需求,就是不显示软键盘。

adjustResize

调整大小状态,这个属性表示 Activity 的主窗口总是会被调整大小来保证软键盘的显示空间。如果界面中有可滑动控件,显示效果跟 adjustUnspecified 显示效果一样;如果界面中没有可滑动控件,软键盘可能会盖住一些控件(布局的位置不会发生变化,可能获取了焦点的控件被软键盘盖住)。

一般来说,我们的布局分为两种

第一种布局是不会出现软键盘把底部按钮顶起的情况,首先软键盘的打开实际上是一个 Dialog,而我们在配置文件内的 adjustResize 属性是在页面的根布局 decorView 的子 view 也就是一个线性布局内通过设置 paddingBottom = 软键盘高度,这样其实相当于把整个滚动布局的高度减少了,所以底部的按钮也只是变为需要滚动才能看到。

第二种情况通常为一个继续按钮始终处于页面的底部,中间的内容可以滚动,当根布局的内边距等于软键盘高度时,底部按钮就看起来像是被顶起。

1、监听软键盘的打开收起

2、修改 windowSoftInputMode

adjustPan

如果设置了这个属性,当软键盘d出的时候,系统会通过布局的移动,来保证用户要进行输入的输入框在用户的视线范围内。如果界面没有可滑动控件,显示效果和 adjustUnspecified 效果一样;如果界面有可滑动控件,在软键盘显示的时候,可能会有一些内容显示不出来。

资料借鉴

Android中Activity的android:windowSoftInputMode属性

原文链接:彻底搞定Android开发中软键盘的常见问题

软件盘的本质是什么?软键盘其实是一个Dialog。

InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或者全屏显示。

软键盘显示的调整

Android 定义了一个属性,名字为windowSoftInputMode, 这个属性用于设置Activity主窗口与软键盘的交互模式,用于避免软键盘遮挡内容的问题。我们可以在AndroidManifetxml中对Activity进行设置。如:android:windowSoftInputMode=”stateUnchanged|adjustPan”。 该属性可选的值有两部分,一部分为软键盘的状态控制,控制软键盘是隐藏还是显示,另一部分是Activity窗口的调整,以便腾出空间展示软键盘。 android:windowSoftInputMode的属性设置必须是下面中的一个值,或一个”state”值加一个”adjust”值的组合,各个值之间用 | 分开。

stateUnspecified-未指定状态 :当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。

stateUnchanged-不改变状态 :当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。

stateHidden-隐藏状态 :当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。

stateAlwaysHidden-总是隐藏状态 :当设置该状态时,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。

stateVisible-可见状态 :当设置为这个状态时,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制d出来出来。

stateAlwaysVisible-总是显示状态 :当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。

adjustUnspecified-未指定模式 :设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会根据界面选择不同的模式。

adjustResize-调整模式 :该模式下窗口总是调整屏幕的大小用以保证软键盘的显示空间;这个选项不能和adjustPan同时使用,如果这两个属性都没有被设置, 系统会根据窗口中的布局自动选择其中一个

adjustPan-默认模式 :该模式下通过不会调整来保证软键盘的空间,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的视野范围里面,从而让用户可以看到自己输入的内容。

案例

没有滚动布局xml

对于没有滚动控件的布局来说,adjustPan就是默认的设置,比如我们案例应用中的文本输入8,上面的文本输入框123和按钮都会被顶上去,且页面布局不可以滚动。

对于没有滚动控件的布局来说,整个布局会网上偏移(包括标题等)以保证输入框的可见。如果有滚动控件,那么就是内容网上偏移,标题不会动,还可以通关滚动来查看被顶上去的内容,而这点是不可滚动的布局所不具备的

有滚动布局xml

对于有滚动控件的布局,则是采用的adjustResize方式,比如我们案例应用中的文本输入8,上面的文本输入框123和按钮都会被顶上去, 可以通过滚动来查看被顶上去的内容。

根据这一原理,我们就可以把开发中遇到的软键盘遮挡页面的问题,利用ScrollView当做根布局,让系统采用adjustResize模式,很好地解决这一问题。

自动d出软键盘

有时候需要一进入Activity后就自动d出软键盘,可以通过设置一个时间函数来实现,具体写法如下:

方法一:

方法二:

有时进入Activity后不希望系统自动d出软键盘,我们可以按照下面的方法来实现:

方法一:

在AndroidMainfestxml中选择那个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden

方法二:

让EditText失去焦点,使用EditText的clearFocus方法

方法三:

强制隐藏Android输入法窗口

方法四:

EditText始终不d出软件键盘

EditText设置ScrollView压缩背景解决办法

在你的Activity里加上

有时希望根据条件动态关闭软键盘,我们可以使用InputMethodManager类,按照下面的方法来实现:

方法一:

方法二:

强制隐藏软键盘,这个方法倒是很实用。

方法三:

方法四:

在onclick事件下以下方法可行(如果是EditText失去焦点/得到焦点,没有效果)

InputMethodManager的具体用法可以参考下面的链接: >

Android中判断软键盘是否d出或隐藏可以借助软键盘显示和隐藏时,对主窗口进行了重新布局这个特性来进行侦听。如果我们设置的模式为压缩模式,那么我们可以对布局的onSizeChanged函数进行跟踪,如果为平移模式,那么该函数可能不会被调用。

    假设跟布局为线性布局,模式为压缩模式,我们写一个例子,当输入法d出时隐藏某个view,输入法隐藏时显示某个view。

public class ResizeLayout extends LinearLayout{     

 private OnResizeListener mListener;         

  public interface OnResizeListener {         

  void OnResize(int w, int h, int oldw, int oldh);     

  }          

  public void setOnResizeListener(OnResizeListener l) {         

  mListener = l;     

  }         

   public ResizeLayout(Context context, AttributeSet attrs) {         

   super(context, attrs);    

    }         

     @Override     

     protected void onSizeChanged(int w, int h, int oldw, int oldh) {             superonSizeChanged(w, h, oldw, oldh);                 

      if (mListener != null) {             

      mListenerOnResize(w, h, oldw, oldh);         

      }     

      } 

      }

以上就是关于android Popupwindow 遇到软键盘时,出现位置发生上移全部的内容,包括:android Popupwindow 遇到软键盘时,出现位置发生上移、手机虚拟键盘介绍、android 自定义软键盘 键盘怎么自定义改键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9752317.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存