If you have some dynamic content changed in runtime, you can override the call-back method onPrepareDialog(), it will be called every time a dialog is opened. Override this method if you want to change any properties of the dialog each time it is opened.
In this example, we will get dynamic content to the dialog; including the Bitmap by screen capture(refer to the post "Capture Screen, using View.getDrawingCache()"), and the user input from a EditText - both will be changed each time the dialog is opened.
Create /res/layout/screendialog.xml, it's the layout of our dialog
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="10dip" android:paddingRight="10dip" > <TextView android:id="@+id/textout" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/image" android:layout_width="300px" android:layout_height="300px" /> <Button android:id="@+id/okdialogbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="OK" /> </LinearLayout>
main code, AndroidCaptureScreen.java
package com.AndroidCaptureScreen; import android.app.Activity; import android.app.Dialog; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; public class AndroidCaptureScreen extends Activity { Bitmap bmScreen; Dialog screenDialog; static final int ID_SCREENDIALOG = 1; ImageView bmImage; Button btnScreenDialog_OK; TextView TextOut; View screen; EditText EditTextIn; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); screen = (View)findViewById(R.id.screen); Button btnCaptureScreen = (Button)findViewById(R.id.capturescreen); EditTextIn = (EditText)findViewById(R.id.textin); btnCaptureScreen.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub screen.setDrawingCacheEnabled(true); bmScreen = screen.getDrawingCache(); showDialog(ID_SCREENDIALOG); }}); } @Override protected Dialog onCreateDialog(int id) { // TODO Auto-generated method stub screenDialog = null; switch(id){ case(ID_SCREENDIALOG): screenDialog = new Dialog(this); screenDialog.setContentView(R.layout.screendialog); bmImage = (ImageView)screenDialog.findViewById(R.id.image); TextOut = (TextView)screenDialog.findViewById(R.id.textout); btnScreenDialog_OK = (Button)screenDialog.findViewById(R.id.okdialogbutton); btnScreenDialog_OK.setOnClickListener(btnScreenDialog_OKOnClickListener); } return screenDialog; } @Override protected void onPrepareDialog(int id, Dialog dialog) { // TODO Auto-generated method stub switch(id){ case(ID_SCREENDIALOG): dialog.setTitle("Captured Screen"); TextOut.setText(EditTextIn.getText().toString()); bmImage.setImageBitmap(bmScreen); break; } } private Button.OnClickListener btnScreenDialog_OKOnClickListener = new Button.OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub screenDialog.dismiss(); }}; }
main.xml, the main layout of our activity.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/screen" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/capturescreen" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Capture Screen" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="\nScreen can be captured using: \n\n screen.setDrawingCacheEnabled(true);\n bmScreen = screen.getDrawingCache();\n" /> <EditText android:id="@+id/textin" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
Related:
- Create custom dialog using AlertDialog.Builder, with dynamic content
Noted:
- This code capture the first screen only! Read Capture screen with getDrawingCache() repeatly
thanks for this post
ReplyDeleteAnkur Kumar
Thanks a lot... Great Work
ReplyDeletethis trick save my life,Sir
ReplyDeleteThanks for the app, but the screen capture doesn't update the contents, if we edit the close the dialog box, the again edit the texts and then click on Capture Screen button, do we need to create a new instance of the bitmap to redraw the screen in the current activity cycle?
ReplyDeletePlease read Capture screen with getDrawingCache() repeatly.
Deletethis code can not take snap from video view,,, i waana take snap from video view help me plzz
ReplyDelete