2つのEditText
フィールドのダイアログを実装しています。マテリアルデザイン仕様によれば、この種のダイアログは小さなデバイスではフルスクリーンで表示する必要がありますが、大きなスクリーンではダイアログウィンドウで表示する必要があります。DialogFragmentがDialogとして表示され、方向変更時にフルスクリーンにサイズ変更されます
これを実現するには、developer.android.com guide on Dialogsの実装に従いました。
小さな画面では問題ありませんが、大きな画面では方向変更後にダイアログウィンドウが全画面表示されます。その後、
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme);
View v = inflater.inflate(R.layout.dialog_filter_audio_files,
container, false);
// code for Buttons and EditTexts here:
// set listeners etc.
return v;
}
...と:
コードDialogFragment
(私のAppCompatActivity
でonOptionsItemSelected()
の一部)DialogFragment
については
mIsLargeLayout = getResources().getBoolean(R.bool.large_layout);
FragmentManager fragmentManager = getSupportFragmentManager();
mDialog = MyDialogFragment.newInstance(mIsLargeLayout);
if (mIsLargeLayout)
{
// The device is using a large layout, so show the fragment as a dialog
mDialog.show(fragmentManager, "dialog");
}
else
{
// The device is smaller, so show the fragment fullscreen
FragmentTransaction transaction = fragmentManager.beginTransaction();
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, mDialog, "dialog")
.addToBackStack(null)
.commit();
}
を示すために、私は私のカスタムレイアウトを膨らませるために最初onCreateView()
を上書きonCreateDialog()
には、次の文が含まれます。
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setCancelable(true);
dialog.getWindow().setBackgroundDrawableResource(R.color.c_background_dark);
return dialog;
私は姿勢の変化にDialogFragment
を却下しませんが、onRestoreInstanceState()
に私はこのようなDialogFragment
に再接続:
mDialog = (DialogFilterAudiofiles) getSupportFragmentManager().findFragmentByTag("dialog");
ユーザーは関係なく、それは、私がしたいように見えるかのダイアログを完了しないことが可能ですがオリエンテーションが変更される前と同じように、ダイアログを小さくするのが好きです。
これまで入力を保存してからonRestoreInstanceState()
に新しいダイアログを表示した後で、ダイアログを閉じることができました(onSaveInstanceState()
)。 または、画面サイズが大きい場合は、AlertDialog
およびsetContentView()
に基づいてDialogFragment
を使用して作業することができます。
サンプルコードをガイドから修正する別の方法はありますか?
EDIT 私は「one layout fits all sizes」アプローチに可能な限り近づきたいと思います。
"onCreateView()"の実装は、 サンプルコードのインスピレーションを受けているため、上記のテキストに関連する部分を追加しました。
この方法では、小さなデバイス用のフルスクリーンダイアログが表示されますか?ガイドのサンプルは、両方のオプションで同じレイアウトを使用することが可能であることを示唆しています。 - OK - ここに隠れるボタンと、そこで膨らませるメニュー。フラグメントは "mIsLargeLayout"値を取得し、状況に適応します – 0X0nosugar