如何围绕GridLayout包装AlertDialog?

时间:2017-01-03 11:18:01

标签: android alertdialog

我有一个xml,其根目录为GridLayout,我希望它显示在AlertDialog内。 这是我在片段onResume()中使用的代码:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View addViewImg = inflater.inflate(R.layout.matrix_image, null);
builder.setView(addViewImg);
AlertDialog alertDialog = builder.create();
Window window = alertDialog.getWindow();
//I tried with "setLayout" but it doesn't work
window.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
alertDialog.show();

在这里:matrix_image.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/matrixLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

    <ImageButton
        android:id="@+id/imageUpLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <!-- Other 8 ImageButtons composing a 3x3 grid --/>

</GridLayout>

问题在于View并非位于AlertDialog内部,而AlertDialog周围的GridLayout没有。

The asymmetrical AlertDialog I get

如何摆脱右边的空格并围绕GridLayout 包裹AlertDialog?

注意:我尝试了在stackoverflow上提出的几个选项,但它们都不适用于我。也许GridLayout的行为有所不同?

2 个答案:

答案 0 :(得分:1)

我不确定它是否适合您,但您可以使用支持库中的GridLayout。然后,有这样的布局:

<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/matrixLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:columnCount="3"
    app:rowCount="3">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_columnWeight="1"
        app:srcCompat="@android:drawable/sym_def_app_icon" />

</android.support.v7.widget.GridLayout>

你会得到这样的结果:

enter image description here

答案 1 :(得分:0)

您可以使用'DialogFragment'而不是'AlertDialog'。它让您可以更自由地进行自定义。您可以在此处找到有关它的教程:https://android-developers.googleblog.com/2012/05/using-dialogfragments.html