博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 软键盘的全面解析,让你不再怕控件被遮盖
阅读量:6990 次
发布时间:2019-06-27

本文共 2246 字,大约阅读时间需要 7 分钟。

博客地址:

博客地址:https://blog.csdn.net/wangwangli6/article/details/77053479/

(2)在软键盘弹出时,是否需要Activity对此进行调整

adjustUnspecified 主窗口的默认行为,不指定 Activity 的主窗口是否调整尺寸以为软键盘腾出空间,或者窗口内容是否进行平移以在屏幕上显露当前焦点。 系统会根据窗口的内容是否存在任何可滚动其内容的布局视图来自动选择其中一种模式。 如果存在这样的视图,窗口将进行尺寸调整,前提是可通过滚动在较小区域内看到窗口的所有内容。
adjustResize 始终调整 Activity 主窗口的尺寸来为屏幕上的软键盘腾出空间。
adjustPan 不调整 Activity 主窗口的尺寸来为软键盘腾出空间, 根据窗口的内容是否可滚动从而平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。 这通常不如尺寸调整可取,因为用户可能需要关闭软键盘以到达被遮盖的窗口部分或与这些部分进行交互。
adjustNoting 软键盘弹出时,主窗口Activity不会做出任何响应。

 

(1)显示软键盘

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
        view.requestFocus();
        imm.showSoftInput(view, 0);
    }
(2)关闭软键盘
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

 

public void layout(int l, int t, int r, int b) {

        if ((mPrivateFlags3 & PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) != 0) {
            onMeasure(mOldWidthMeasureSpec, mOldHeightMeasureSpec);
            mPrivateFlags3 &= ~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;
        }
        int oldL = mLeft;
        int oldT = mTop;
        int oldB = mBottom;
        int oldR = mRight;
        boolean changed = isLayoutModeOptical(mParent) ?
                setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);
        if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {
            onLayout(changed, l, t, r, b);
            mPrivateFlags &= ~PFLAG_LAYOUT_REQUIRED;
            ListenerInfo li = mListenerInfo;
            if (li != null && li.mOnLayoutChangeListeners != null) {
                ArrayList<OnLayoutChangeListener> listenersCopy =
                        (ArrayList<OnLayoutChangeListener>)li.mOnLayoutChangeListeners.clone();
                int numListeners = listenersCopy.size();
                for (int i = 0; i < numListeners; ++i) {
                    listenersCopy.get(i).onLayoutChange(this,l,t,r,b,oldL,oldT,oldR,oldB);
                }
            }
        }
        mPrivateFlags &= ~PFLAG_FORCE_LAYOUT;
        mPrivateFlags3 |= PFLAG3_IS_LAID_OUT;
    }
方法的主要步骤如下:
    确定子 View 在父 View 中的位置
    判断子 View 位置是否发生变化,如果发生变化则调用 onLayout() 方法
---------------------
作者:Xuejianxin_
来源:CSDN
原文:https://blog.csdn.net/jim__charles/article/details/54233065
版权声明:本文为博主原创文章,转载请附上博文链接!

---------------------
作者:旺仔哥
来源:CSDN
原文:https://blog.csdn.net/wangwangli6/article/details/77053479/
版权声明:本文为博主原创文章,转载请附上博文链接!

 

转载于:https://www.cnblogs.com/l-h-h/p/10360692.html

你可能感兴趣的文章
I.MX6 I2C DS1337 disable square-wave output
查看>>
php中一些函数的用法
查看>>
【BZOJ】3996: [TJOI2015]线性代数
查看>>
巧用枚举类型,实现项目的多语言切换
查看>>
Hibernate createCriteria查询详解
查看>>
关于Action返回结果类型的事儿(下)
查看>>
检测客户端显示器分辨率、浏览器类型和客户端IP
查看>>
Thread之三:Thread Join()的用法
查看>>
C编程基础
查看>>
jquery判断滚动条是否到底部
查看>>
jquery 选择对象随心所欲,遍历数组更是易如反掌
查看>>
CI-持续集成(1)-软件工业“流水线”概述
查看>>
JSF教程(9)——生命周期之Process Validations Phase
查看>>
[转载]AxureRP常用快捷键
查看>>
【zookeeper】 zookeeper 集群搭建
查看>>
OpenStack 中的neutron-server启动过程
查看>>
Java Runtime.availableProcessors()方法
查看>>
Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号...
查看>>
busybox filesystem udhcpc 原理
查看>>
OpenCV 64位时 应用程序无法正常启动0x000007b 问题解决
查看>>