带动作栏的活动的Android屏幕截图

时间:2012-11-02 11:14:12

标签: android android-actionbar screenshot

我使用这些行来截取我的活动:

View toppest = ((ViewGroup) ctx.getWindow().getDecorView().findViewById(android.R.id.content)).getChildAt(0);
toppest.setDrawingCacheEnabled(true);
Bitmap bmap = toppest.getDrawingCache();
Utils.saveBitmapOnSdcard(bmap);
toppest.setDrawingCacheEnabled(false);

无论如何,此屏幕截图不包含操作栏。

如何使用actionBar制作屏幕截图?

有关信息:我使用Sherlock actionbar实现windowActionBarOverlay选项为“true”。

2 个答案:

答案 0 :(得分:7)

我找到了解决方案。需要使用ctx.getWindow()。getDecorView()查看以获得全屏位图缓存。

此外,还有一个小细节:屏幕截图包含状态栏的空白区域。我们借助Window.ID_ANDROID_CONTENT上边距跳过状态栏高度。最后,这会给我们以前在电话上看到的相同尺寸的活动全屏:

  View view = ctx.getWindow().getDecorView();
  view.setDrawingCacheEnabled(true);

  Bitmap bmap = view.getDrawingCache();
  Log.i(TAG,"bmap:" + b);


  int contentViewTop = ctx.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); /* skip status bar in screenshot */
  Storage.shareBitmapInfo = Bitmap.createBitmap(bmap, 0, contentViewTop, bmap.getWidth(), bmap.getHeight() - contentViewTop, null, true);

  view.setDrawingCacheEnabled(false);

答案 1 :(得分:3)

解决方案可以在这里找到:

Height of statusbar?

Rect rectgle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight= rectgle.top;
int contentViewTop= 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int TitleBarHeight= contentViewTop - StatusBarHeight;

   Log.i("*** Jorgesys :: ", "StatusBar Height= " + StatusBarHeight + " , TitleBar Height = " + TitleBarHeight);