无论我尝试什么,AlertDialog 都不会包装内容

Jef*_*hou 7 android android-alertdialog android-dialog

这是我的对话框的 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/main"
android:paddingTop="23dp"
android:background="@android:color/white">

<ImageView
    android:id="@+id/officer"
    android:layout_width="47dp"
    android:layout_height="47dp"
    android:layout_marginLeft="24dp"
    android:background="@drawable/officerman"/>
<TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Are you sure you want\nto sign out?"
    android:textSize="15.5dp"
    android:textColor="#1C86FF"
    android:layout_marginTop="4dp"
    android:lineSpacingExtra="2dp"
    android:layout_marginLeft="84dp"/>

<LinearLayout
    android:layout_marginTop="20dp"
    android:layout_width="264dp"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1"
    android:layout_below="@id/officer">

    <Button
        android:id="@+id/yes"
        android:layout_width="wrap_content"
        android:layout_weight="0.5"
        android:layout_height="42dp"
        android:background="#1C86FF"
        android:text="Yes"
        android:textAllCaps="false"
        android:textSize="15dp"
        android:textColor="@android:color/white"/>

    <Button
        android:id="@+id/no"
        android:layout_width="wrap_content"
        android:layout_weight="0.5"
        android:layout_height="42dp"
        android:background="#0078FF"
        android:textSize="15dp"
        android:textColor="@android:color/white"
        android:textAllCaps="false"
        android:text="No"/>

</LinearLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的java代码

    AlertDialog.Builder build = new AlertDialog.Builder(Login.this);
    View lview = getLayoutInflater().inflate(R.layout.dialog_leave,null);
    build.setView(lview);
    AlertDialog dialog = build.create();
    dialog.show();
Run Code Online (Sandbox Code Playgroud)

alertdialog无论我尝试什么,大小都不会包装到我的内容中。就这样结束了。它在右侧增加了扩展空间以使其达到一定的大小。

单击此处查看图像。它在右侧添加了扩展空间,以使其达到默认的警报对话框大小

我尝试过使用getWindow.setLayout(width,height)像素,但这太痛苦了,必须有更好的方法来做到这一点。

getWindow.setLayout(Relative.LayoutParams.WRAP_CONTENT, ...)也试过了,同样的事情仍然发生。

我也试过使用popupwindow. 解决这个问题的简单方法是什么?

小智 10

以上内容都没有为我包装内容。这对我有用。

我在styles.xml中添加了这个样式

<style name="WrapContentDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowMinWidthMajor">0%</item>
    <item name="windowMinWidthMinor">0%</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后我将它设置为这样的对话框。

AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), R.style.WrapContentDialog);
Run Code Online (Sandbox Code Playgroud)

希望它也适合你。


Nil*_*hod 6

试试这个我的朋友

 AlertDialog.Builder build = new AlertDialog.Builder(Login.this);
    LayoutInflater mlLayoutInflater=LayoutInflater.from(MainActivity.this);
    final  View dialView=mlLayoutInflater.inflate(R.layout.R.layout.dialog_leave,null);
    AlertDialog dialog_card = build.create();
    Window window = dialog_card.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    window.setGravity(Gravity.CENTER);
    build.show();
Run Code Online (Sandbox Code Playgroud)


Ash*_*hok 0

尝试使用DialogFragment

public class DialogChangePasswordFragment extends DialogFragment {
private Listener dialogButtonClick;
private EditText editOldPassword;
private EditText editNewPassword;
private EditText editConfirmPassword;

public static DialogChangePasswordFragment newInstance() {
    DialogChangePasswordFragment fragment = new DialogChangePasswordFragment();
    return fragment;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        dialogButtonClick = (Listener) context;
    } catch (Exception e) {
        dialogButtonClick = (Listener) getTargetFragment();
        e.printStackTrace();
    }

}

@Override
public void onResume() {
    super.onResume();
    getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}

@Override
public void onDetach() {
    super.onDetach();
    dialogButtonClick = null;
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    return dialog;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.dialog_password_confirm, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    TextView dialogOk = (TextView) view.findViewById(R.id.dialogOk);
    TextView dialogCancel = (TextView) view.findViewById(R.id.dialogCancel);
    dialogOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (validateFields()) {
                dialogButtonClick.onConfirmChangePassword(editOldPassword.getText().toString().trim(), editConfirmPassword.getText().toString().trim());
                dismiss();
            }
        }
    });
    setCancelable(false);
    dialogCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dismiss();
        }
    });
}



public interface Listener {
    void onConfirmChangePassword(String oldPassword, String newPassword);
}
Run Code Online (Sandbox Code Playgroud)

}