在此之前,我用a DialogBuilder来创建AlertDialog这样的
AlertDialog.Builder builder = new AlertDialog.Builder(context);
...
...
AlertDialog dialog = builder.create();
Run Code Online (Sandbox Code Playgroud)
如何AppCompatDialog从对话框构建器构建新的,或者是否有另一种新的等效方法来执行此操作?
android android-appcompat android-alertdialog material-design appcompatdialog
我想要一个AppCompat风格的对话框 - 背景,标题,按钮位置,按钮色调等 - 包含片段.
使用自定义DialogFragment onCreateDialog()可以返回一个AppCompatDialog,然后在onCreateView()新的布局中可以膨胀并childFragmentManager可以用于用Fragment替换占位符视图.但是生成的对话框是一个没有按钮的空框.可以手动将它们添加到对话框的布局中,但它们不会从AppCompat中获得样式.
如果您使目标片段扩展,则同样适用DialogFragment.
要获得AppCompat按钮,您可以使用AlertDialog.Builder它.setView()来设置布局,但是我找不到将Fragment设置为内容的方法.如果你从那时开始尝试childFragmentManager.beginTransaction().replace(),onCreateDialog()你会得到:
java.lang.IllegalStateException: Fragment does not have a view
Run Code Online (Sandbox Code Playgroud)
这似乎是因为,即使在使用builder.setView()或dialog.create() 随后dialog.setView(), onCreateView()并且getView()总是返回null.
这里的第二个答案似乎非常全面地涵盖了这一点,但没有提出有利的解决方案:https://stackoverflow.com/a/21418952/2645845
如果您覆盖onCreateView()或getView()返回您膨胀的视图,那么您会得到:
android.util.AndroidRuntimeException: Window feature must be requested before adding content
at android.support.v7.app.AppCompatDelegateImplV7.throwFeatureRequestIfSubDecorInstalled(AppCompatDelegateImplV7.java:1479)
Run Code Online (Sandbox Code Playgroud) android android-appcompat android-fragments android-dialog appcompatdialog
android ×2