Android,如何获得ViewGroup的宽度和高度?

时间:2012-05-12 18:58:25

标签: android height width viewgroup

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

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);

任何建议将不胜感激。感谢

2 个答案:

答案 0 :(得分:0)

试试这个:

    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);

答案 1 :(得分:0)

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

请注意,这仅在视图准备好后才有效,而不是在onCreate()方法中。但是,它将适用于这种情况,因为它在用户相关的操作中,这在向用户显示视图之后发生。

btw,关于你的代码,“rlContainer.getLayoutParams()。width”可能会返回一个负值,以防它是wrap-content或match-parent。