Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓限制布局测量看不到软键盘_Android_Android Softkeyboard_Android Constraintlayout - Fatal编程技术网

Android 安卓限制布局测量看不到软键盘

Android 安卓限制布局测量看不到软键盘,android,android-softkeyboard,android-constraintlayout,Android,Android Softkeyboard,Android Constraintlayout,好的,我正在尝试创建一个事件挂钩,当软键盘显示或隐藏时通知我 我将约束布局细分如下: public class MyConstraintLayout extends ConstraintLayout { //public static final String KEYBOARD_STATE = "KEYBOARD_STATE", SHOWN = "SHOWN", HIDDEN = "HIDDEN"; public static final String ACTION_KEYBOA

好的,我正在尝试创建一个事件挂钩,当软键盘显示或隐藏时通知我

我将约束布局细分如下:

public class MyConstraintLayout extends ConstraintLayout
{
    //public static final String KEYBOARD_STATE = "KEYBOARD_STATE", SHOWN = "SHOWN", HIDDEN = "HIDDEN";
    public static final String ACTION_KEYBOARD_SHOWN = "KEYBOARD_SHOWN";
    public static final String ACTION_KEYBOARD_HIDDEN = "KEYBOARD_HIDDEN";
    private LocalBroadcastManager localBroadcastManager;
    private Intent keyboardShown, keyboardHidden;
    private boolean shown = false;

    public MyConstraintLayout(Context context)
    {
        super(context);
        init(context);
    }

    public MyConstraintLayout(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init(context);
    }

    public MyConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context)
    {
        localBroadcastManager = LocalBroadcastManager.getInstance(context);
        keyboardShown = new Intent(ACTION_KEYBOARD_SHOWN);
        keyboardHidden = new Intent(ACTION_KEYBOARD_HIDDEN);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        //Log.d("Search Layout", "Handling Keyboard Window shown");
        final int proposedHeight = MeasureSpec.getSize(heightMeasureSpec);
        final int actualHeight = getHeight();

        Log.v("MyConstraintLayout", "onMeasure: actualHeight="+actualHeight+", proposedHeight="+proposedHeight);

        if(actualHeight > proposedHeight)
        {
            // Keyboard is shown
            if(!shown)
            {
                shown = true;
                localBroadcastManager.sendBroadcast(keyboardShown);
            }
        }
        else
        {
            // Keyboard is hidden
            if(shown)
            {
                shown = false;
                localBroadcastManager.sendBroadcast(keyboardHidden);
            }
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}
但布局似乎根本看不到键盘,因为显示键盘时的日志输出与删除键盘时的日志输出完全相同。 以下是日志输出: 显示键盘时:

V/MyConstraintLayout: onMeasure: actualHeight=1120, proposedHeight=1280 V/MyConstraintLayout: onMeasure: actualHeight=1120, proposedHeight=1120 V/MyConstraintLayout:On测量:实际高度=1120,建议高度=1280 V/MyConstraintLayout:On测量:实际高度=1120,建议高度=1120 当键盘被隐藏时

V/MyConstraintLayout: onMeasure: actualHeight=1120, proposedHeight=1280 V/MyConstraintLayout: onMeasure: actualHeight=1120, proposedHeight=1120 V/MyConstraintLayout:On测量:实际高度=1120,建议高度=1280 V/MyConstraintLayout:On测量:实际高度=1120,建议高度=1120 我正在测试运行安卓6.0.1的三星J500f

所以我有两个问题:
1-为什么布局看不到键盘?
2-为什么在1120和1280之间以提议的高度触发两次事件

还要注意的是,在我将
android:windowSoftInputMode=“adjustPan”
添加到Manifest.xml之前,它已经触发了4次(仍然只是在相同的值之间切换)