我必须设计一个应用程序,在其中点击中性按钮,警报对话框的图像存储在SD卡中。 所以我决定以编程方式截取屏幕截图,然后使用BitmapDecodeRegion类来裁剪图像。
但是当我拍摄截图时,警报对话框不会出现在其中,因为它没有附加到窗口。 如何将其附加到窗口?
这是代码段:
public void btnClick(View v) {
Log.d("", "logger button clicked");
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle("This is a demo!");
dialog.setMessage("Lets see if this works");
dialog.setCancelable(false);
dialog.setNeutralButton("Take Snap",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Bitmap bitmap;
View v1 = findViewById(android.R.id.content)
.getRootView();
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
GlobalObj.screenImg = bitmap;
v1.setDrawingCacheEnabled(false);
Intent i = new Intent(MainActivity.this,
ViewActivity.class);
startActivity(i);
}
});
AlertDialog newDialog = dialog.create();
newDialog.show();
请帮助我。
答案 0 :(得分:0)
试试这个图书馆:https://github.com/jraska/Falcon。 它包含所有活动窗口的截图,包括对话框,可以找出问题所在。
答案 1 :(得分:0)
在您的代码中更改此行:
View v1 = findViewById(android.R.id.content)
.getRootView();
到此:
View v1 = AlertDialog.class.cast(dialog).getWindow().getDecorView().getRootView();
它适用于我,不需要root电话。但是,这仅捕获黑色背景上的警报对话框,而不包含活动的基础视图。如果你想拥有一切(不是那么简单),你可以试试Aswin Rajendiran的this answer。