表示したいようにxmlを編集して頂ければそのままダイアログとして表示されます。
MAX_HEIGHT, MAX_WIDTHを0.9Fにすれば縦横90%の大きさで表示されます。
画像のPopupWinodwのように一枚だけ画像を表示したい。などであれば、ImageViewをnewしてそのままDialog#setContentView()にImageViewを渡してやればxmlは不要です。
終了したいタイミングでdismiss()を呼ぶ。
public class CustomFragmentDialog extends DialogFragment { private static final String TAG = CustomFragmentDialog.class.getSimpleName(); private static final float MAX_HEIGHT = 1.00F; private static final float MAX_WIDTH = 1.00F; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_dialog, null, false); Dialog dialog = new Dialog(getActivity()); // タイトルバーを非表示 dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); // フルスクリーン dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN ); // デフォルトテーマを消して透明にする dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // ダイアログの外をタッチした際にダイアログを消すかどうか dialog.setCanceledOnTouchOutside(false); dialog.setContentView(view); return dialog; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Dialog dialog = getDialog(); WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); DisplayMetrics metrics = getResources().getDisplayMetrics(); int dialogWidth = (int) (metrics.widthPixels * MAX_WIDTH); int dialogHeight = (int) (metrics.heightPixels * MAX_HEIGHT); lp.width = dialogWidth; lp.height = dialogHeight; // lp.windowAnimations = R.style.DialogAnimation; // Dialogの表示アニメーション dialog.getWindow().setAttributes(lp); } }
ActivityからFragmentDialog#show()で表示できます。第2引数にタグを設定することも出来ます。
タグやリクエストコードは定数化しておいたほうが良さそう。
FragmentManager manager = getFragmentManager(); CustomFragmentDialog dialog = new CustomFragmentDialog(); if (manager.findFragmentByTag("dialog") == null) { // onActivityResultでコールバックを受ける際のrequestCode dialog.setTargetFragment(null, 99); // Backキーでキャンセル可能かどうか dialog.setCancelable(false); // 値を渡す場合はDialogFragment#setArgument()する Bundle args = new Bundle(); args.putInt("point", 100); dialog.setArguments(args); // 表示 dialog.show(manager, "dialog"); }
ここで投げたPendingIntentは親ActivityのonActivityResultで受け取ります。
Intent#putExtra()で値を渡すこともできます。
public void fncCallback(String cb){ Intent result = new Intent(); result.putExtra("callback", cb); PendingIntent pi = getActivity().createPendingResult(getTargetRequestCode(), result, PendingIntent.FLAG_ONE_SHOT); try { pi.send(getActivity().RESULT_OK); } catch (PendingIntent.CanceledException e) { e.printStackTrace(); } }