设置自定义对话框的高度和宽度。

10

我正在制作一个自定义对话框,希望其高度和宽度默认适合所有屏幕尺寸。

但是实际上并没有发生这种情况。对话框出现得非常小。 以下是该对话框的XML代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#D24379"
android:orientation="vertical" >

<TextView
    android:id="@+id/txt_dia"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:textColor="@android:color/white"
    android:textSize="15dp"
    android:textStyle="bold" >
</TextView>

 <LinearLayout
    android:id="@+id/layButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/yesButton"
        android:layout_width="0.0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        android:background="#ffffff"
        android:text="@string/yes" />

    <Button
        android:id="@+id/noButton"
        android:layout_marginLeft="5dp"
        android:layout_width="0.0dip"
        android:background="#ffffff"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        android:text="@string/no" />
</LinearLayout>

这是我的对话框类

public class CustomDialogClass extends Dialog implements
            android.view.View.OnClickListener {

        public Activity c;
        public Dialog d;
        public Button yes, no;
        public TextView content;

        public CustomDialogClass(Activity a) {
            super(a);
            this.c = a;
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.custom_dialog);
            yes = (Button) findViewById(R.id.yesButton);
            no = (Button) findViewById(R.id.noButton);
            content=(TextView)findViewById(R.id.txt_dia);
            yes.setOnClickListener(this);
            no.setOnClickListener(this);

        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.yesButton:

                break;
            case R.id.noButton:
                dismiss();
                break;
            default:
                break;
            }
            dismiss();
        }
      }

如何设置高度和宽度以出现默认大小,从而在所有屏幕尺寸下都能完美显示。

我得到了一个非常小的对话框。

5个回答

18

不要使用 Dialog 类,尝试使用这个类:

    public class MainActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);


                     ShowDialog();

        }

        private void ShowDialog() {
                // TODO Auto-generated method stub
                final Dialog dialog = new Dialog(context,
                        android.R.style.Theme_Translucent_NoTitleBar);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(R.layout.custom_dialog);
                WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
                lp.copyFrom(dialog.getWindow().getAttributes());
                lp.width = WindowManager.LayoutParams.MATCH_PARENT;
                lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
                lp.gravity = Gravity.CENTER;

                dialog.getWindow().setAttributes(lp);

                Button yes = (Button) dialog.findViewById(R.id.yesButton);
                yes.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        dialog.dismiss();

                    }
                });

                Button no = (Button) dialog.findViewById(R.id.noButton);
                no.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent i = new Intent(
                                Intent.ACTION_PICK,

                        dialog.dismiss();

                    }
                });

                  TextView content =(TextView) dialog.findViewById(R.id.txt_dia);



                dialog.show();
            }
}

6
需要在 dialog.show() 后设置 dialog.getWindow().setAttributes(lp);。请注意,不要改变原文的意思,并尽量使用通俗易懂的语言。 - IAmGroot

5

在扩展Dialog类时:

public MyPopUp(MainActivity activity, String sPrm) {
    super(activity);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.alert_dialog);
    LinearLayout bedLcl = (LinearLayout) findViewById(R.id.bed);
    TextView textLcl = (TextView) findViewById(R.id.dialog_text);
    textLcl.setText(sPrm);
    setOnCancelListener(this);
    DisplayMetrics displayMetrics = new DisplayMetrics();
 activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    int widthLcl = (int) (displayMetrics.widthPixels*0.9f);
    int heightLcl = (int) (displayMetrics.heightPixels*0.9f);
    FrameLayout.LayoutParams paramsLcl = (FrameLayout.LayoutParams) 
    bedLcl.getLayoutParams();
    paramsLcl.width = widthLcl;
    paramsLcl.height =heightLcl ;
    paramsLcl.gravity = Gravity.CENTER;
    show();
    Window window = getWindow();
    bedLcl .setLayoutParams(paramsLcl);
    window .setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));}

在所有屏幕上正确显示

在所有屏幕上正确显示。


4
在你的自定义对话框的 onCreate()中添加this.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

1
您可以在LinearLayout中添加 android:gravity="center",并同时设置一个最小高度,例如 android:minHeight="120dp"。然后您可以在各种设备上测试布局,并进行微调,直到获得适用于所有屏幕尺寸的效果。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="120dp"
android:gravity="center"
android:background="#D24379"
android:orientation="vertical" >

0

我已经修改了你的布局,请现在尝试

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:background="#D24379"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/txt_dia"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginTop="10dp"
            android:layout_weight="0.20"
            android:text="Are you good?"
            android:textColor="@android:color/white"
            android:textSize="15dp"
            android:textStyle="bold" />

        <LinearLayout
            android:id="@+id/layButton"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_margin="5dp"
            android:gravity="center"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/yesButton"
                android:layout_width="0.0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:background="#ffffff"
                android:text="YES" />

            <Button
                android:id="@+id/noButton"
                android:layout_width="0.0dip"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:layout_weight="1.0"
                android:background="#ffffff"
                android:text="NO" />
        </LinearLayout>

    </LinearLayout>

12
你需要明确表述你所改变的内容。 - wsgeorge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接