2

我想动态创建一个LinearLayout。

如何将其设置为在我的 AlertDialog 中显示?

我见过一些例子,其中布局是通过 XML 创建并膨胀显示的,但是当我可以动态地创建 XML 布局时,我不想创建它。

我仅限于 API 16 = Android 4.1.2

这是我活动中的一个按钮...

public void TestOnClick() {
    Button test_button = (Button) findViewById(R.id.button_test);
    test_button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            LinearLayout layout = new LinearLayout(v.getContext());

            //Create a TextView to add to layout
            TextView textview = new TextView(v.getContext());
            textview.setText("My Test");
            layout.addView(textview);

            //Add abunch of other items to the layout
            //blah blah blah

            AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
            builder.setView(layout);
            builder.setNeutralButton("Done", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    });
}
4

3 回答 3

3

看起来我必须执行以下操作才能以动态和编程方式创建 LinearLayout 并将该布局显示到 AlertDialog 上:

public void TestOnClick() {
    Button test_button = (Button) findViewById(R.id.button_test);
    test_button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            //Create LinearLayout Dynamically
            LinearLayout layout = new LinearLayout(v.getContext());

            //Setup Layout Attributes
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layout.setLayoutParams(params);
            layout.setOrientation(LinearLayout.VERTICAL);

            //Create a TextView to add to layout
            TextView textview = new TextView(v.getContext());
            textview.setText("My Text");

            //Create Spinner
            Spinner spinner = new Spinner(v.getContext());
            String[] string_list = new String[]{"Test 1", "Test 2", "Test 3"};
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_selectable_list_item, string_list);
            spinner.setAdapter(adapter);
            spinner.setGravity(Gravity.CENTER);

            //Create button
            Button button = new Button(v.getContext());
            button.setText("My Button");
            button.setWidth(100);
            button.setHeight(50);

            //Add Views to the layout
            layout.addView(textview);
            layout.addView(spinner);
            layout.addView(button);

            //Create AlertDialog Builder
            AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());

            //Give the Dialog a Title
            builder.setTitle("Results");

            //Set the Dynamically created layout as the Dialogs view 
            builder.setView(layout);

            //Add Dialog button that will just close the Dialog
            builder.setNeutralButton("Done", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });

            //Show the custom AlertDialog
            AlertDialog alert = builder.create();
            alert.show();
        }
    });
}
于 2015-08-15T19:51:42.963 回答
0

要将对话框主题应用于活动,只需通过添加 android:theme 属性来修改 AndroidManifest.xml 文件中的元素,如下所示:

 android:theme="@android:style/Theme.Dialog"

这样做会使活动显示为对话框。

此外,如果您需要隐藏活动标题而不显示..在活动的 OnCreate 方法中添加此行

 requestWindowFeature(Window.FEATURE_NO_TITLE);  

仅此而已,如果这对您有帮助,请点赞... 访问此页面

于 2015-08-15T15:48:35.950 回答
0

你的意思是像这样制作 AlertDialog 吗?

在此处输入图像描述

把它放在你的进口

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Context;

然后添加此代码

final Context context = this;   

Button test_button = (Button) findViewById(R.id.button_test);
test_button.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View arg0) {

   AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
    context);

   alertDialogBuilder.setTitle("Quit");

   alertDialogBuilder
    .setMessage("Are you sure want to Quit?")
    .setCancelable(false)
    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog,int id) {
      // if this button is clicked, close
      // current activity
     menu.this.finish();
     }
      })
    .setNegativeButton("No",new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog,int id) {
      // if this button is clicked, just close
      // the dialog box and do nothing
      dialog.cancel();
     }
    });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();
   }
  });
}   
于 2015-08-15T15:48:55.473 回答