Android screenshot of activity with actionbar

2019-02-14 04:29发布

问题:

I use these lines to take screenshot of my activity:

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

Anyway, this screenshot not contain actionbar.

How I can make screenshot with actionBar ?

For information: I use Sherlock actionbar implementation with windowActionBarOverlay option to "true".

回答1:

I found solution. Need to use ctx.getWindow().getDecorView() View to get full screen bitmap cache.

Also, there is small detail: screenshot contains empty space for status bar. We skip status bar height with help of Window.ID_ANDROID_CONTENT top margin. Finally, this give full screenhot of activity with same size as we saw it before on our telephone :

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


回答2:

The solution can be found here:

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