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次(仍然只是在相同的值之间切换)