内容へ移動
MSS Wiki 開発者ブログ (メモ?)
ユーザ用ツール
ログイン
サイト用ツール
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
最近の変更
メディアマネージャー
サイトマップ
トレース:
dialogfragmentを使ったカスタムダイアログ
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
===== DialogFragmentの実装 ===== * 使い方 表示したいようにxmlを編集して頂ければそのままダイアログとして表示されます。\\ MAX_HEIGHT, MAX_WIDTHを0.9Fにすれば縦横90%の大きさで表示されます。\\ 画像のPopupWinodwのように一枚だけ画像を表示したい。などであれば、ImageViewをnewしてそのまま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にコールバックを返す ===== ここで投げた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(); } } ===== ダイアログの表示 ===== タグやリクエストコードなどは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"); }
dialogfragmentを使ったカスタムダイアログ.1424413738.txt.gz
· 最終更新: 2015/02/20 15:28 by
sou
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ