以前のリビジョンの文書です
表示したいように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);
}
}
タグやリクエストコードなどはonActivityResultやDialog側でも使用するので、定数化しておいたほうが良さそうです。
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();
}
}
* Activity側の実装