仅获得部分屏幕

时间:2015-10-27 17:43:43

标签: android screenshot partial

我正在进行丝网印刷并将其作为电子邮件附件发送。然而,通常丝网印刷具有空的底部区域,大约是软键盘的尺寸。但是,我在屏幕截图之前隐藏了键盘,并且在屏幕上看不到它。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_mail:
            hideKeyboard();
            View v = getWindow().getDecorView().getRootView();
            v.setDrawingCacheEnabled(true);
            myBitmap = v.getDrawingCache();
            saveBitmap(myBitmap);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

public void saveBitmap(Bitmap bitmap) {
    String filePath = Environment.getExternalStorageDirectory()
            + File.separator + Consts.SCREENSHOT_PATH_FILENAME;
    File imagePath = new File(filePath);
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();
        sendMail(filePath);
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

public void hideKeyboard() {
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager imm =(InputMethodManager getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}

然后将其作为电子邮件附件发送。任何想法如何摆脱屏幕上的软键盘大小的空白打印?

1 个答案:

答案 0 :(得分:1)

好的,以下似乎有效。紧接着这一行:

 View v = getWindow().getDecorView().getRootView();

我补充说:

v.invalidate();

我不能发誓这可以解决问题,但是在进行此更改后问题仍未再次发生。在过去,在隐藏键盘和创建位图之后,屏幕似乎并不总是被重新绘制,在键盘屏幕上留下了一个“空”点。