从另一个Android片段中获取bac后,无法再在片段中设置OnGlobalLayoutListener

时间:2017-09-13 04:52:08

标签: android android-layout android-fragments

我设置OnGlobalLayoutListener以检测fragmentonActivityCreated()中的软键盘事件(隐藏或显示软键盘)。如果我没有去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()没有显示或隐藏软键盘。有什么建议吗?谢谢!

1 个答案:

答案 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"中设置此标记 否则此解决方案将无效。

希望它适合你。