【问题标题】:AlertDialog doesn't wrap my contentAlertDialog 不包装我的内容
【发布时间】:2017-05-17 15:01:33
【问题描述】:

我正在使用警报对话框显示带有微调器的视图以设置图表的周期和比例

但它没有包装我的内容,我尝试的所有 tuto 都失败了......

我的代码

        LinearLayout vue = new LinearLayout(context);
        vue.setOrientation(LinearLayout.VERTICAL);
        vue.addView(diag.getView());

        choixPeriode = (Spinner) vue.findViewById(R.id.spinner_periode);
        choixEchelle = (Spinner) vue.findViewById(R.id.spinner_echelle);
        if(choixEchelle == null)
            choixEchelle = new Spinner(context);
        final int oldPeriode = DiagramController.PeriodeToPos(this.periode);
        final int oldEchelle = DiagramController.echelleToPos(this.echelle);
        choixPeriode.setSelection(oldPeriode);
        choixEchelle.setSelection(oldEchelle);


        LinearLayout containerButton = new LinearLayout(context);
        containerButton.setGravity(Gravity.CENTER);

        final ImageView croix = ((ImageView) vue.findViewById(R.id.croix));
        final Button ok = new Button(context);
        ok.setText(R.string.valider);
        final Button cancel = new Button(context);
        cancel.setText(android.R.string.cancel);

        containerButton.addView(ok);
        containerButton.addView(cancel);

        vue.addView(containerButton);

        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
        dialogBuilder.setView(vue);

        final AlertDialog alertDialog = dialogBuilder.create();
        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
        lp.copyFrom(alertDialog.getWindow().getAttributes());
        lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        alertDialog.getWindow().setAttributes(lp);
        alertDialog.show();

        croix.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
            }
        });

        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                periode = DiagramController.posToPeriode(choixPeriode.getSelectedItemPosition());
                echelle = DiagramController.posToEchelle(choixEchelle.getSelectedItemPosition());
                changePeriode();
                alertDialog.dismiss();
            }
        });

        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
            }
        });

diag.getView() 返回带有标题、微调器和图表的 LinearLayout。

结果为纵向

结果为横向

自定义对话框的结果

【问题讨论】:

  • 我建议制作一个自定义对话框(也许你已经尝试过了)。如果你不知道怎么做,我会把代码贴给你。
  • 我想过,但我不知道该怎么做。没有简单的解决方案?
  • 很简单,我把代码发给你。给我一分钟。

标签: android layout android-alertdialog


【解决方案1】:

1.) 您需要创建自定义 xml 布局。

2.) 创建一个新类。并在 onCreate 中编写您的代码。

public class MyDialog extends Dialog {

private TextView textView;

private Context context;

public MyDialog(Context context) {
    super(context);

    this.context = context;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.my_layout);

    //Your code
    textView = (TextView) findViewById(R.id.textView);


}
}

【讨论】:

  • 如果对您有帮助,请告诉我。
  • 完美运行!!万分感谢 !我没有使用 XML。我在构造函数中添加了一个字段View,并用它设置了 contentView
  • 我可以设置自定义对话框的大小吗?我尝试使用getWindow.setLayout,但没有任何效果
  • 你到底想达到什么目的?
  • 我在使用自定义对话框时用图片更新了我的帖子
猜你喜欢
  • 1970-01-01
  • 2015-12-06
  • 2017-11-26
  • 1970-01-01
  • 2019-12-06
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多