在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
Adjusting size of custom dialog box in 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_PARENT
has 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();
}