我设置OnGlobalLayoutListener
以检测fragment
中onActivityCreated()
中的软键盘事件(隐藏或显示软键盘)。如果我没有去fragment
那就没关系。
private void setGlobalLayoutListener() {
View rootView = getView().findViewById(R.id.root_view);
onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout(){
//do st here
}
};
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
}
然后我转到另一个fragment
做某事,然后回来,我在setGlobalLayoutListener()
再次致电onActivityCreated()
,但当我发送时onGlobalLayout()
没有显示或隐藏软键盘。有什么建议吗?谢谢!
答案 0 :(得分:0)
试试这个,
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > dpToPx(this, 200)) { // if more than 200 dp, it's probably a keyboard...
// ... do something here
}
}
});
使用以下实用程序:
public static float dpToPx(Context context, float valueInDp) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
}
注意:您必须在Android Manifest android:windowSoftInputMode="adjustResize"
中设置此标记
否则此解决方案将无效。
希望它适合你。