1

不确定该标题如何描述我希望做的事情,但在这里。基本上我有一个应用程序,它实用地创建一个按钮列表,当点击它时返回一个描述。

我创建了以下课程

public class DynamicOnClickListener implements OnClickListener
{

    String description;
    public DynamicOnClickListener(String adesc) {
        //sets the description attribute at instantiation
         this.description = adesc;
    }

    public void onClick(View v) {
        //on button click returns dialog box with description in it
        Log.v("DynamicOnClickListener","1");
        AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
        builder.setMessage(description);
        builder.setCancelable(false);
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) 
                   {
                       dialog.cancel();
                   }
               });
        AlertDialog alert = builder.create();   
        alert.show();
    }

 }

这可以完美地工作,但是我非常想在某种程度上使对话框更加活跃。我一直在网上查看一些示例,根据 android 文档,他们建议定义自定义 xml 布局并使用 LayourInflator 将自定义 xml 设置为对话框的视图。(好吧,反正我就是这么理解的,可能是错误的就够了)

尽管文档示例与我的示例略有不同,但根据他们的示例,我应该添加以下几行

// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();

// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.dialog_signin, null))

但是,当我将它添加到我的班级时,导致以下我在 getActivity() 上收到错误

public class DynamicOnClickListener implements OnClickListener
{

    String description;
    public DynamicOnClickListener(String adesc) {
        //sets the description attribute at instantiation
         this.description = adesc;
    }

    public void onClick(View v) {
        //on button click returns dialog box with program description in it
        Log.v("DynamicOnClickListener","1");
        AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());

        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();

        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        builder.setView(inflater.inflate(R.layout.description_dialog, null));


        builder.setMessage(description);
        builder.setCancelable(false);
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) 
                   {
                       dialog.cancel();
                   }
               });
        AlertDialog alert = builder.create();   
        alert.show();
    }

 }
4

3 回答 3

3

我用一个 EditText 输入电子邮件和一个按钮来发送数据并取消它。这个对话框通过使背景变暗来显示。并将其显示在当前活动之上。

    final Dialog dialog = new Dialog(this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
               LinearLayout popUp = new LinearLayout(this);
               popUp.setBackgroundColor(Color.LTGRAY);
               popUp.setOrientation(1);

                EditText t1 = new  EditText(this);
                t1.setHint("Enter Your Email ID ");
                t1.setTextColor(Color.parseColor("#FFFFFF"));
                t1.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);          

                LinearLayout btnLayout = new LinearLayout(this);
                btnLayout.setBackgroundColor(Color.LTGRAY);
                btnLayout.setOrientation(0);
                btnLayout.setGravity(Gravity.CENTER);

                Button send = new  Button(this);
                send.setText("Send");
                send.setTextColor(Color.WHITE);
                Button cancel = new  Button(this);
                cancel.setText("Cancel");
                cancel.setTextColor(Color.WHITE);

                btnLayout.addView(send);
                btnLayout.addView(cancel);
                popUp.addView(t1);
                popUp.addView(btnLayout);

                dialog.setContentView(popUp);
              cancel.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    dialog.dismiss();
                }
            });
                dialog.show();
于 2013-12-07T11:07:02.507 回答
2
final Context mContext = v.getContext()
inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
builder.setView(inflater.inflate(R.layout.description_dialog, null));

尝试这个。

于 2013-03-26T11:44:18.880 回答
0

根据 CoderDecoder 和 kleopatra 的回答,这里是带有形状的更新版本。

    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    GradientDrawable shape = new GradientDrawable();
    shape.setColor(getResources().getColor(R.color.shape_client_textview_background_color));
    shape.setStroke(10, getResources().getColor(R.color.shape_client_textview_border_color));
    shape.setCornerRadius(50);

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
    LinearLayout popUp = new LinearLayout(this);
   // popUp.setBackgroundColor(Color.LTGRAY);
    layoutParams.setMargins(20,20,20,20);
    popUp.setOrientation(LinearLayout.VERTICAL);
    popUp.setLayoutParams(layoutParams);
    popUp.setBackground(shape);
    popUp.setPadding(20,20,20,20);

    EditText t1 = new EditText(this);
    t1.setHint("Enter Your Email ID ");
    t1.setTextColor(Color.parseColor("#FFFFFF"));
    t1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);

    LinearLayout btnLayout = new LinearLayout(this);
 //   btnLayout.setBackgroundColor(Color.LTGRAY);
    btnLayout.setOrientation(LinearLayout.HORIZONTAL);
    btnLayout.setGravity(Gravity.CENTER);

    Button send = new Button(this);
    send.setText("Send");
    send.setTextColor(Color.WHITE);
    Button cancel = new Button(this);
    cancel.setText("Cancel");
    cancel.setTextColor(Color.WHITE);

    btnLayout.addView(send);
    btnLayout.addView(cancel);
    popUp.addView(t1);
    popUp.addView(btnLayout);

    dialog.setContentView(popUp);
    cancel.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            dialog.dismiss();
        }
    });

    dialog.show();

结果如下:

带有形状的动态对话框

于 2017-12-05T08:27:43.597 回答