iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android软键盘的显示隐藏功能实现过程
  • 234
分享到

Android软键盘的显示隐藏功能实现过程

Android 2022-06-06 11:06:14 234人浏览 独家记忆
摘要

一、软键盘显示的原理     软件盘的本质是什么?软键盘其实是一个Dialog!     InputMethodSe

一、软键盘显示的原理

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

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

二、活动主窗口调整

    Android定义了一个属性,名字为windowsoftInputMode, 用它可以让程序可以控制活动主窗口调整的方式。我们可以在AndroidManifet.xml中对Activity进行设置。如:android:windowSoftInputMode="stateUnchanged|adjustPan"
    该属性可选的值有两部分,一部分为软键盘的状态控制,另一部分是活动主窗口的调整。前一部分本文不做讨论,请读者自行查阅android文档。

模式一,压缩模式

    windowSoftInputMode的值如果设置为adjustResize,那么该Activity主窗口总是被调整大小以便留出软键盘的空间。

我们通过一段代码来测试一下,当我们设置了该属性后,弹出输入法时,系统做了什么。
重写Layout布局:


public class ResizeLayout extends LinearLayout{ 
  private static int count = 0; 
  public ResizeLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
  } 
  @Override 
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {   
    super.onSizeChanged(w, h, oldw, oldh); 
    Log.e("onSizeChanged " + count++, "=>onResize called! w="+w + ",h="+h+",oldw="+oldw+",oldh="+oldh); 
  } 
  @Override 
  protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    super.onLayout(changed, l, t, r, b); 
    Log.e("onLayout " + count++, "=>OnLayout called! l=" + l + ", t=" + t + ",r=" + r + ",b="+b); 
  } 
  @Override 
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    Log.e("onMeasure " + count++, "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec); 
  } 

xml:


<com.winuxxan.inputMethodTest.ResizeLayout 
 xmlns:android="Http://schemas.android.com/apk/res/android" 
 android:id="@+id/root_layout" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:orientation="vertical" 
 > 
 <EditText 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
 /> 
 <LinearLayout 
   android:id="@+id/bottom_layout" 
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:orientation="vertical" 
   android:gravity="bottom">s 
 <TextView 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:text="@string/hello" 
  android:background="#77777777" 
  /> 
 </LinearLayout> 
</com.winuxxan.inputMethodTest.ResizeLayout> 

AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize"

运行程序,点击文本框,查看调试信息:


E/onMeasure 6(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742024
E/onMeasure 7(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742025
E/onSizeChanged 8(7960): =>onSizeChanged called! w=320,h=201,oldw=320,oldh=377
E/onLayout 9(7960): =>OnLayout called! l=0, t=0,r=320,b=201

从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。

实际上,当设置为adjustResize后,软键盘弹出时,要对主窗口布局重新进行measure和layout,而在layout时,发现窗口的大小发生的变化,因此调用了onSizeChanged。

从下图的运行结果我们也可以看出,原本在下方的TextView被顶到了输入法的上方。  

 模式二,平移模式

windowSoftInputMode的值如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
上面的例子中,我们将AndroidManifest.xml的属性进行更改:android: windowSoftInputMode = "adjustPan"

重新运行,并点击文本框,查看调试信息:


E/onMeasure 6(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742200
E/onMeasure 7(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742201
E/onLayout 8(8378): =>OnLayout called! l=0, t=0,r=320,b=377

我们看到:系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用,这说明输入法弹出前后并没有改变原有布局的大小。

从下图的运行结果我们可以看到,下方的TextView并没有被顶到输入法上方。

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

模式三 自动模式

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

    也就是说,系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚动。

以上所述是小编给大家介绍的Android软键盘的显示隐藏功能实现过程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文章:Android Dialog中软键盘的显示与隐藏的示例Android 显示和隐藏软键盘的方法(手动)Android编程之软键盘的隐藏显示实例详解解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法Android开发中软键盘的显示和隐藏


--结束END--

本文标题: Android软键盘的显示隐藏功能实现过程

本文链接: https://www.lsjlt.com/news/28310.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 检测键盘显示或隐藏键盘的实现代码
    Android 检测键盘是否显示及隐藏键盘的方法~~        Android 中对于键盘的隐藏与显示的文章很多,今天公司项目需求不仅需要键盘隐藏和显示还需要对键盘的...
    99+
    2023-05-31
    android 键盘 roi
  • Android应用中怎么实现一个隐藏与显示键盘功能
    Android应用中怎么实现一个隐藏与显示键盘功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。隐藏键盘: public static void hideSoftInp...
    99+
    2023-05-31
    android roi
  • Android项目中怎么显示与隐藏软键盘
    今天就跟大家聊聊有关Android项目中怎么显示与隐藏软键盘,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码如下:import android.app.Activity;impor...
    99+
    2023-05-31
    android roi 目中
  • Android应用中怎么实现一个软键盘隐藏功能
    这篇文章将为大家详细讲解有关Android应用中怎么实现一个软键盘隐藏功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体方法如下:...public static void hideKe...
    99+
    2023-05-31
    android roi
  • 如何在Android项目中显示与隐藏软键盘
    本篇文章为大家展示了如何在Android项目中显示与隐藏软键盘,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、软键盘显示的原理    软件盘的本质是什么?软键盘其实是...
    99+
    2023-05-31
    android roi 目中
  • Android怎么实现显示和隐藏密码功能
    这篇文章主要介绍“Android怎么实现显示和隐藏密码功能”,在日常操作中,相信很多人在Android怎么实现显示和隐藏密码功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android怎么实现显示和隐藏密...
    99+
    2023-07-02
  • Android实现显示和隐藏密码功能的示例代码
    在前端中我们知道用javascript就可以可以很容易实现,那么在Android中怎么实现这个功能呢? Java代码 package com.example.test2; impo...
    99+
    2024-04-02
  • Android开发中怎么使用Dialog显示与隐藏软键盘
    Android开发中怎么使用Dialog显示与隐藏软键盘?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。效果图:2.实现过程先说说最开始的实现方法:// 显示Dialogdial...
    99+
    2023-05-31
    android dialog roi
  • JS显示隐藏功能怎么实现
    这篇文章主要介绍“JS显示隐藏功能怎么实现”,在日常操作中,相信很多人在JS显示隐藏功能怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS显示隐藏功能怎么实现”的疑惑...
    99+
    2024-04-02
  • Android开发中实现点击隐藏软键盘的方法
    Android开发中实现点击隐藏软键盘的方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸E...
    99+
    2023-05-31
    android roi
  • Android编程之ListView和EditText发布帖子隐藏软键盘功能详解
    本文实例讲述了Android编程之ListView和EditText发布帖子隐藏软键盘功能。分享给大家供大家参考,具体如下:在Android开发中,手动调用软件盘的隐藏和显示有时候也是非常常见的需求。EditText控件实现了点击打开软键盘...
    99+
    2023-05-30
    android listview edittext
  • Android实现密码隐藏和显示
    本文实例为大家分享了Android实现密码隐藏和显示的具体代码,供大家参考,具体内容如下 在Android开发中,需要密码的隐藏和显示,下面就和大家分享一下使用方法: xml代码: ...
    99+
    2022-11-13
    Android密码隐藏 Android密码显示 Android密码隐藏显示
  • vue如何实现密码显示隐藏功能
    这篇文章给大家分享的是有关vue如何实现密码显示隐藏功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果:思路:利用input的type属性,当type值是text的时候展示密码,当type值是password...
    99+
    2023-06-14
  • Android软键盘状态并隐藏输入法的示例分析
    这篇文章主要介绍了Android软键盘状态并隐藏输入法的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Android 软键盘状态并隐藏输入法的实例1 软键盘状态的切换...
    99+
    2023-05-30
    android
  • Android开发中如何使用PopupWindow实现隐藏与显示功能
    这篇文章给大家介绍Android开发中如何使用PopupWindow实现隐藏与显示功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、PopupWindow的隐藏final PopupWindow window = ...
    99+
    2023-05-31
    android popupwindow roi
  • Android 中怎么利用EditText实现密码的隐藏和显示功能
    这篇文章给大家介绍Android 中怎么利用EditText实现密码的隐藏和显示功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android EditText密码的隐藏和显示功能实现效果图:实现代码:首先在xml里...
    99+
    2023-05-30
    android edittext
  • Android应用中怎么实现一个密码显示与隐藏功能
    Android应用中怎么实现一个密码显示与隐藏功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现代码如下:<&#63;xml version="1....
    99+
    2023-05-31
    android roi
  • vue基于input实现密码的显示与隐藏功能
    前言 大家都知道,一般情况下,输入框的密码我们是看不到密码的,只有当我们点击查看密码的小图标时,密码才会显现出来,实现起来也非常简单,通过点击图标让input的type属性变化即可。...
    99+
    2024-04-02
  • Android开发EditText实现密码显示隐藏
    最近在做一个登录、注册页面,里面需要显示或隐藏密码,故做了一个简单的显示和隐藏功能。 关键类TextView.setTransformationMethod(Transformati...
    99+
    2022-11-13
    Android EditText密码隐藏 Android EditText密码显示 Android密码显示隐藏
  • Android中实现密码的隐藏和显示的示例
    在Android开发中,需要密码的隐藏和显示,下面就和大家分享一下使用方法:xml代码: <LinearLayout android:layout_width="match_parent" android:...
    99+
    2023-05-30
    android 密码 显示
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作