【问题标题】:How to Build AppCompatDialog From AlertDialog.Builder or Equivalent?如何从 AlertDialog.Builder 或等效项构建 AppCompatDialog?
【发布时间】:2015-06-29 10:31:10
【问题描述】:

在此之前,我使用DialogBuilder 像这样创建AlertDialog

AlertDialog.Builder builder = new AlertDialog.Builder(context);
...
...
AlertDialog dialog = builder.create();

如何从对话框构建器构建新的AppCompatDialog,或者是否有其他新的等效方法可以做到这一点?

【问题讨论】:

    标签: android material-design android-alertdialog android-appcompat appcompatdialog


    【解决方案1】:

    刚刚找到解决方案。我应该导入

    import android.support.v7.app.AlertDialog;
    

    然后AppCompatDialog dialog = builder.create() 将起作用。

    【讨论】:

      【解决方案2】:

      如果您想使用AlertDialog,只需导入新的supprt v 22.1 并使用这样的代码(注意导入):

      import android.support.v7.app.AlertDialog
      
      AlertDialog.Builder builder =
             new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
                  builder.setTitle("Dialog");
                  builder.setMessage("Lorem ipsum dolor ....");
                  builder.setPositiveButton("OK", null);
                  builder.setNegativeButton("Cancel", null);
                  builder.show();
      

      如果

      【讨论】:

      • 当使用builder.setView(v) appcompatdialog 时,对话框的大小是最大的,而不是仅仅包装组件。这里v 是一个recyclerview,它有变量号。项目
      • 我应该怎么做才能使对话框的大小根据编号改变。 recyclerview 个项目?
      【解决方案3】:

      android.support.v7.app.AppCompatDialogandroid.support.v7.app.AlertDialog的直接父类,可以使用android.support.v7.app.AlertDialog的地方可以使用android.support.v7.app.AppCompatDialog

      【讨论】:

        【解决方案4】:

        我刚刚将所有android.app.AlertDialog 移至android.support.v7.app.AlertDialog

        在使用 4.X 模拟器进行一些测试后,我发现对于一个简单的对话框,只需更改导入即可。但是对于多选对话框,另外,您需要执行 AppCompatDialog alert = builder.create(); 才能获得 Material Design 样式对话框(在 4.X 上)。

        要清楚,如果你有一个像这样的简单对话框:

        import android.support.v7.app.AlertDialog;
        
        AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
        builder.setIcon(resId)
        .setTitle(title)
        .setMessage(msg)
        .setCancelable(isCalncelable)
        .setPositiveButton(btn1, listener1);
        AlertDialog alert = builder.create();
        alert.show();
        

        更改导入就足够了:)

        但是对于多选对话框,您需要像这样使用AppCompatDialog

        import android.support.v7.app.AlertDialog;
        import android.support.v7.app.AppCompatDialog;
        
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Choose something")
        .setPositiveButton(...)
        .setMultiChoiceItems(mStringArray, mSelectedArray, SomeFragment.this);
        AppCompatDialog alert = builder.create();
        alert.show();
        

        然后您会在 4.X 设备上获得漂亮的 Material Design 外观。

        现在是有趣的部分!

        对于多选对话框,在 5.X 设备上,本机版本 (android.app.AlertDialog) 在左侧显示复选框,正确地跟随Material Design spec。但如果您使用支持对话框,则复选框将出现在右侧。卧槽!

        从长远来看,随着 Android 5+ 获得市场份额,您将希望切换回原生对话框。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-23
          • 1970-01-01
          • 2018-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多