最新のappcompat v23.0.1を使用してカスタムダイアログを適切に作成する方法について、ここでは本当に混乱しています。いくつかの方法があります。
最初の方法:
public class AddTipDialogFrag extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
int title = getArguments().getInt("title");
AppCompatDialog dialogCompat = new AppCompatDialog(getActivity(), R.style.MyAlertDialogStyle);
dialogCompat.setTitle(title); //doesn't work btw
dialogCompat.setContentView(R.layout.add_tip_fragment);
return dialogCompat;
}
}
2番目の方法:
public class AddTipDialogFrag extends AppCompatDialogFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.add_tip_fragment,container, false);
int title = getArguments().getInt("title");
getDialog().setTitle(title);
return view;
}
}
どちらの方法でも同じ結果が得られるようです。個人的に私は1番目の方法を好みますが、下の図に示すように、システムビューの境界が終了すると切り取られるリップル効果の問題があります。
これはバグですか? (それはそうでなければなりません!)それを修正できますか、それとも2番目の方法に変換するだけですか? (これはリップル効果でうまく機能します)。ほとんどのマテリアルダイアログライブラリが最初の方法を使用していることを考慮して、これらの2つの方法の間の最良のアプローチは何ですか?
編集:最初の方法のリップルグリッチはもう発生していないようですので、どちらがこれらの2つの正しい方法であるかはまだわかりません。
2番目のアプローチは、AppCompatDialogFragment
がDialogFragment
を拡張し、すべての面倒な作業を行うので、より良いようです。また、不必要な詳細を抽象化して(OOPとインラインで)見栄えを良くしています。
また、望ましい効果を与える;)
第2のアプローチは、プラットフォームスタイルのダイアログの代わりにAppCompatDialogを使用するDialogFragmentの特別なバージョンであるため、より優れています。 AppCompatDialogFragment
はDialogFragment
のサブクラスであり、DialogFragment
のすべてのプロパティを継承します。