Search code examples
javaandroidandroid-activityandroid-contextonmeasure

Android: java.lang.ClassCastException: com.android.layoutlib.bridge.android.BridgeContext cannot be cast to android.app.Activity"


These are the problem in details :

java.lang.ClassCastException: com.android.layoutlib.bridge.android.BridgeContext cannot be cast to android.app.Activity
at io.jchat.android.view.LoginView.onMeasure_Original(LoginView.java:123);
at io.jchat.android.view.LoginView.onMeasure(LoginView.java) ;

And my code is:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int height = MeasureSpec.getSize(heightMeasureSpec);
    mContext = getContext();
    Activity activity = (Activity)mContext;
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

    int statusBarHeight = rect.top;

    activity.getWindowManager().getDefaultDisplay().getMetrics(dm);

    int screenHeight = dm.heightPixels;
    int diff = (screenHeight - statusBarHeight) - height;

    if(mListener != null){
        mListener.onSoftKeyboardShown(diff);
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

As a freshman, I am eager for your help. Thank you!


Solution

  • protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    
        int height = MeasureSpec.getSize(heightMeasureSpec);
    
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    
        int statusBarHeight = 0;
        if (resourceId > 0) {
    
             statusBarHeight = getResources().getDimensionPixelSize(resourceId);
        }
    
        dm = getResources().getDisplayMetrics();
    
        int screenHeight = dm.heightPixels;
        int diff = (screenHeight - statusBarHeight) - height;
        if(mListener != null){
            mListener.onSoftKeyboardShown(diff);
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }