填充屏幕高度的自定义对话框

时间:2017-03-30 21:48:43

标签: android alertdialog android-alertdialog customdialog

我正在尝试创建一个自定义对话框,并且工作正常,但Dialog正在填充整个屏幕高度。我在互联网上做过一些不成功的研究,但我没有足够的时间完成这项任务,如果有人知道为什么会这样,我很欣赏它。

这里是onCreateDialog():

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder= new AlertDialog.Builder(getContext());
    LayoutInflater inflater= (LayoutInflater) builder.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.dialog__warning, mContainer, false);
    txtWarning = (TextView)view.findViewById(R.id.txtWarning);
    if(messageWarning.length()>0)
    {
        txtWarning.setText(messageWarning);
    }
    btnOkDialog = (Button) view.findViewById(R.id.btnOkDialog);
    btnOkDialog.setOnClickListener(MyListener);
    btnCancelDialog = (Button) view.findViewById(R.id.btnCancelDialog);
    btnCancelDialog.setOnClickListener(MyListener);
    builder.setView(view);
    return builder.create();
}

和dialog_warning的xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="300dp"
android:layout_height="300dp"
android:background="#b1b0b0"
tools:context="ipat.johanbayona.gca.ipat.NewEvidence.Dialog_Warning">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:textSize="25sp"
    android:id="@+id/txtWarning"
    android:text="Mensaje error" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="OK"
    android:id="@+id/btnOkDialog"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_marginBottom="10dp"
    />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Cancel"
    android:id="@+id/btnCancelDialog"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="10dp"
    />
</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

尝试为对话框创建自己的主题,类似这样

<style name="AppDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

并将此主题设置为使用R.style.AppDialog

传递给对话框的超级构造函数

UPD。 它不是构建器的构造函数。你应该创建自己的类来扩展AlertDialog,覆盖它的onCreate,超级构造函数和你的类应该是这样的

public class YourDialog extends Dialog {

    public YourDialog(@NonNull Context context) {
        super(context, R.style.AppDialog);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.dialog__warning);

        txtWarning = (TextView) findViewById(R.id.txtWarning);
        if(messageWarning.length()>0)
        {
            txtWarning.setText(messageWarning);
        }
        btnOkDialog = (Button) findViewById(R.id.btnOkDialog);
        btnOkDialog.setOnClickListener(MyListener);
        btnCancelDialog = (Button) findViewById(R.id.btnCancelDialog);
        btnCancelDialog.setOnClickListener(MyListener);
    }
}

覆盖主构造函数,并传递R.style.AppDialog应该可以解决问题。您所需要的只是调用您想要显示对话框new YourDialog(context).show();

的位置

请注意,您无需手动调用布局过热器来传递您自己的内容视图,只需使用resId调用setContentView就会自动对下面的视图进行充气。

答案 1 :(得分:0)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="300dp"
android:layout_height="300dp"
android:background="#b1b0b0"
tools:context="ipat.johanbayona.gca.ipat.NewEvidence.Dialog_Warning">

将“layout_height”更改为wrap_content。你修正了高度和宽度,这可能是问题,具体取决于你的屏幕尺寸。