Android,如何获取视窗组的宽度和高度?

Android,如何获取视窗组的宽度和高度?,android,height,width,viewgroup,Android,Height,Width,Viewgroup,在我的应用程序中,我需要知道活动主容器的大小。我编写了以下代码: Button btnActionMenu = (Button) findViewById(R.id.actionbar_menu); btnActionMenu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int w

在我的应用程序中,我需要知道活动主容器的大小。我编写了以下代码:

Button btnActionMenu = (Button) findViewById(R.id.actionbar_menu);
        btnActionMenu.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                int width = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());
                RelativeLayout rlContainer = (RelativeLayout) findViewById(R.id.inner_content);
                Bitmap bitmap = Bitmap.createBitmap(rlContainer.getLayoutParams().width, rlContainer.getLayoutParams().height, Config.ARGB_8888);//
                Canvas canvas = new Canvas(bitmap);
                rlContainer.draw(canvas);
                SlideoutHelper.setBitmap(bitmap, width);
                startActivity(new Intent(Home.this, MenuActivity.class));
                overridePendingTransition(0, 0); 
            }
        });
rlContainer是活动的根容器。当我运行并单击按钮时,应用程序崩溃,Logcat显示应用程序空指针异常并指向行

Bitmap bitmap = Bitmap.createBitmap(rlContainer.getLayoutParams().width, rlContainer.getLayoutParams().height, Config.ARGB_8888);
如有任何建议,将不胜感激。谢谢

试试这个:

    v.measure(
    MeasureSpec.makeMeasureSpec(v.getLayoutParams().width,MeasureSpec.EXACTLY),
    MeasureSpec.makeMeasureSpec(v.getLayoutParams().height, MeasureSpec.EXACTLY));
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight()
   ,Bitmap.Config.RGB_565);

您是否在rlContainer变量上尝试过getMeasuredHeight和getMeasuredWidth,或getHeight和getWidth

请注意,这仅在准备好视图后有效,而不在onCreate方法内有效。但是,它将在这种情况下工作,因为它位于与用户相关的操作中,该操作在视图显示给用户之后发生


顺便说一句,关于您的代码,rlContainer.getLayoutParams.width可能返回负值,以防它是包装内容或匹配父级

感谢亲爱的Imran,但结果与指向代码第二行的空指针消息相同。我不知道为什么会这样!!!谢谢你用的是RLV还是RLV?