在android中调整自定义对话框的大小

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10242144/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 02:57:31  来源:igfitidea点击:

Adjusting size of custom dialog box in android

android

提问by prateek

I am building an custom alert dialog box for my application i have written the code and its working but the only problem is its size it is not adjusting according to my content in dialog box. below is my code:

我正在为我的应用程序构建一个自定义警报对话框我已经编写了代码及其工作,但唯一的问题是它的大小没有根据我在对话框中的内容进行调整。下面是我的代码:

public class CustomDialogBoxActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button)findViewById(R.id.Button01main);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                final Dialog myDialog = new Dialog(CustomDialogBoxActivity.this);
                myDialog.setContentView(R.layout.dialog_sms_layout);
                myDialog.setTitle("Select any one");


                Button ok = (Button)myDialog.findViewById(R.id.buttonOK);
                final RadioGroup radioGrp = (RadioGroup)myDialog.findViewById(R.id.radioGroupSmsDialog);

                final CheckBox mob1 = (CheckBox)myDialog.findViewById(R.id.checkBoxMob1);
                final CheckBox mob2 = (CheckBox)myDialog.findViewById(R.id.checkBoxMob2);
                mob1.setText("9029691986");
                mob2.setText("99263911766");

                ok.setOnClickListener(this);

                ok.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        if(mob1.isChecked() && mob2.isChecked()) {
                            if(radioGrp.getCheckedRadioButtonId() == R.id.radioSms) {
                                String[] phoneArray = {mob1.getText().toString(),mob2.getText().toString()};

                                Log.v("MOB1",mob1.getText().toString());
                                Log.v("MOB2",mob2.getText().toString());
                                Log.v("Mobile No", ""+phoneArray.toString());
                                sendSms("SMS Message",phoneArray);

                            }else if(radioGrp.getCheckedRadioButtonId() == R.id.radioBusinessCard) {
                                String[] phoneArray = {mob1.getText().toString(),mob2.getText().toString()};

                                Log.v("MOB1",mob1.getText().toString());
                                Log.v("MOB2",mob2.getText().toString());
                                Log.v("Mobile No", ""+phoneArray.toString());
                                sendSms("SMS Business Card",phoneArray);
                            }
                        }else if(mob1.isChecked() && !mob2.isChecked()) {
                            if(radioGrp.getCheckedRadioButtonId() == R.id.radioSms) {
                                String[] phoneArray = {mob1.getText().toString()};

                                Log.v("MOB1",mob1.getText().toString());                                
                                Log.v("Mobile No", ""+phoneArray.toString());
                                sendSms("SMS Message",phoneArray);

                            }else if(radioGrp.getCheckedRadioButtonId() == R.id.radioBusinessCard) {
                                String[] phoneArray = {mob1.getText().toString()};

                                Log.v("MOB1",mob1.getText().toString());                                
                                Log.v("Mobile No", ""+phoneArray.toString());
                                sendSms("SMS Business Card",phoneArray);
                            }

                        }else if(!mob1.isChecked() && mob2.isChecked()) {
                            if(radioGrp.getCheckedRadioButtonId() == R.id.radioSms) {
                                String[] phoneArray = {mob2.getText().toString()};

                                Log.v("MOB2",mob2.getText().toString());
                                Log.v("Mobile No", ""+phoneArray.toString());
                                sendSms("SMS Message",phoneArray);

                            }else if(radioGrp.getCheckedRadioButtonId() == R.id.radioBusinessCard) {
                                String[] phoneArray = {mob2.getText().toString()};

                                Log.v("MOB2",mob2.getText().toString());
                                Log.v("Mobile No", ""+phoneArray.toString());
                                sendSms("SMS Business Card",phoneArray);
                            }

                        }else if(!mob1.isChecked() && !mob2.isChecked()) {
                            Toast.makeText(getApplicationContext(), "Select atleast one number", Toast.LENGTH_SHORT).show();
                        }                       
                    }
                });
                myDialog.show();
            }

        });
    }

    public void sendSms(String message,String[] phoneNumber) {

        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
        smsIntent.setData(Uri.parse("sms:"));
        smsIntent.putExtra("sms_body", message);
        smsIntent.putExtra("address", phoneNumber);
        startActivity(smsIntent);       
    }
}

This is the outputthat i'm getting on button click

这是我点击按钮的输出

This is my main.xml

这是我的 main.xml

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

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This is my main activity, from here, I want to display a dialog, 
                        after the user clicked the button below this text." />

    <Button
        android:id="@+id/Button01main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Dialog" />

</LinearLayout>

and this is my dialog_sms_layout

这是我的 dialog_sms_layout

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

<RadioGroup
        android:id="@+id/radioGroupSmsDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
         >

        <RadioButton
            android:id="@+id/radioSms"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="SMS" />

        <RadioButton
            android:id="@+id/radioBusinessCard"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Card" />
    </RadioGroup>

<CheckBox
    android:id="@+id/checkBoxMob1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checked="true"
    android:text="Primary" />

<CheckBox
    android:id="@+id/checkBoxMob2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Secondary" />

<Button
    android:id="@+id/buttonOK"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="OK" />

</LinearLayout>

I want to adjust the dialog box size please help. thanks in advance

我想调整对话框大小请帮忙。提前致谢

回答by hooked82

I'm not sure if this will work for your situation, but if you want to set it to full width or something similar, you need to get the current Window for the activity and set it's layout params like so:

我不确定这是否适用于您的情况,但是如果您想将其设置为全宽或类似的,您需要获取活动的当前窗口并设置它的布局参数,如下所示:

myDialog.show();
Window window = myDialog.getWindow();
window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

Edit

编辑

FILL_PARENThas been deprecated, use instead

FILL_PARENT已弃用,请改用

window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

回答by Vijay Makwana

You just need to add is style "Theme_AppCompat_Light_Dialog_Alert" to your dialog like this:

您只需要将样式“Theme_AppCompat_Light_Dialog_Alert”添加到您的对话框中,如下所示:

Dialog dialog = new Dialog(context, R.style.Theme_AppCompat_Light_Dialog_Alert);

and your dialog is looks like normal alert dialog

并且您的对话框看起来像正常的警报对话框

回答by CodyBugstein

I solved this by removing the title bar with this code

我通过使用此代码删除标题栏解决了这个问题

    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

and adding padding to elements in my layout to stretch the Dialog box to my liking.

并向我的布局中的元素添加填充以根据我的喜好拉伸对话框。

回答by Krishna

<?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:orientation="vertical">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:gravity="center"
    android:text="Write Feedback"
    android:textColor="@color/colorAccent"
    android:textSize="22sp"
    android:textStyle="bold" />

<RatingBar
    android:id="@+id/rating_bar"
    style="?android:attr/ratingBarStyleIndicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="8dp"
    android:isIndicator="false"
    android:numStars="5" />

<EditText
    android:id="@+id/inputSearchEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:background="@drawable/edittextstyle"
    android:gravity="center"
    android:hint="@string/write_feedback"
    android:inputType="text"
    android:minHeight="100dp"
    android:padding="16dp" />

<Button
    android:id="@+id/submit_feedback_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="16dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:background="@drawable/background_stroke"
    android:text="submit"
    android:textColor="@android:color/white" />
   </LinearLayout>

Dialog class :- 

dialog = new Dialog(mContext);
dialog.setContentView(R.layout.dialog_feedback);
dialog.show();

回答by M Karimi

Use Relative_Layout instead of Linear_layout to get full width of Custom Dialog. I don't know why but it's work for me.

使用 Relative_Layout 而不是 Linear_layout 来获得自定义对话框的全宽。我不知道为什么,但这对我有用。

回答by Parban

    private void showdialog() {
    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.activity_disclaimer);
    dialog.show();
    Window window = dialog.getWindow();
    window.setLayout(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
    Button dialogButton = (Button) dialog.findViewById(R.id.ok);
    dialogcb= (CheckBox) dialog.findViewById(R.id.checkBox);
    dialogButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            accepted = dialogcb.isChecked();
            SharedPreferences.Editor edit=prefs.edit();
            edit.putBoolean("show_again",!accepted);
            edit.commit();
            dialog.dismiss();
        }
    });

    dialog.show();
}