zoukankan      html  css  js  c++  java
  • Android 软键盘的全面解析,让你不再怕控件被遮盖

    博客地址:http://blog.csdn.net/l540675759/article/details/74528641

    博客地址: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/
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    MySql错误解决方案汇总
    不适合做管理的人zz
    linux 自动执行 crontab学习笔记
    Google Megastore分布式存储技术全揭秘zz
    【算法】n个人围成一圈报数,报到3的退出,下面接着从1开始报,问最后剩下的是谁?
    大数据下的数据分析平台架构zz
    ETL的可扩展性和可维护性zz
    【算法】各种排序算法测试代码
    谈爱情故事,谈观察者模式
    解读设计模式单例模式(Singleton Pattern)
  • 原文地址:https://www.cnblogs.com/l-h-h/p/10360692.html
Copyright © 2011-2022 走看看