修改AlertDialog中ListView的高度

时间:2015-12-18 17:34:33

标签: android android-layout alertdialog

我正在建立一个AlertDialog来显示一个菜单,用户可以在其中选择他的手机号码所在的国家/地区。

列表的一个例子是这样的:

-----------------------------
|        PHONE PREFIX       |
|                           |
|  Spain           -  0034  |
|  United Kingdom  -  0044  |
|  France          -  0033  |
|---------------------------|
|  CANCEL         ACCEPT    |
|----------------------------

依旧......

我创建了一个list_view项目:

<?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">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        >


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_listview_pais"
        android:textSize="20sp"
        android:text="United Kingdom"
        android:layout_alignParentLeft="true"
        android:textColor="@color/cardview_dark_background"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp"
        />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/item_listview_guion"
            android:textSize="20sp"
            android:text="-"
            android:layout_centerHorizontal="true"
            android:textColor="@color/cardview_dark_background"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"

            />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_listview_prefijo"
        android:textSize="20sp"
        android:layout_marginTop="5dp"
        android:textColor="@color/cardview_dark_background"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="5dp"
        android:layout_alignParentRight="true"
        android:layout_alignBaseline="@+id/item_listview_pais"

        android:text="0034"

        />

    </RelativeLayout>
</RelativeLayout>

我想要的AlertDialog布局非常简单:

<?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="match_parent">

            <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="30dp"
                >
                <ListView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:id="@+id/input_turno_dialog_listview_prefijos">

                </ListView>

            </ScrollView>
</LinearLayout>

在我的活动的某个时刻,我按下一个按钮,在actionbutton事件中,我调用一个PrefijosDS,它给我一个ArrayList来填充适配器。 Prefijo课程是这样的:

private String Country;
private String Prefijo;

所以Prefijo对象可以是这样的:

Prefijo prefijo = new Prefijo("Spain","0034");

使用我的PrefijoDS,我得到一个数组,所以我得到了我需要的数据。然后,我像这样调用AlertDialog:

AlertDialog alertDialog = builder.create();
                ListView lv = (ListView) convertView.findViewById(R.id.input_turno_dialog_listview_prefijos);
                PrefijoDS prefijoDS = new PrefijoDS(getApplicationContext());
                ListaPrefijosAdapter prefijosAdapter = new ListaPrefijosAdapter(getApplicationContext());
                prefijosAdapter.set((ArrayList<Prefijo>) prefijoDS.obtenerPrefijos());
                lv.setAdapter(prefijosAdapter);

                alertDialog.show();

它有效,我显示了AlertDialog,但ListView的高度非常小,几乎是单行项目的高度。我想要的是调整高度一点,这样它可以在列表上显示3或4个项目,然后其余的可以滚动。我尝试了不同的方法来制作最高的AlertDialog,但每次我得到相同的大小。我获得AlertDialog的唯一方法是当我不使用ScrollView时。然而,这变成了一个我不想要的非常大的AlertDialog。

我试过这样做:

alertDialog.getWindow().setLayout(200,300);

但结果是一个调整大小的AlertDialog,但ListView保持不变。 我该怎么办?

非常感谢!

2 个答案:

答案 0 :(得分:2)

更改警报对话框大小

 AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);

还有一件事将列表视图layout_height和layout_width更改为match_parent

答案 1 :(得分:0)

您可以使用体重

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

        <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="50"
         android:orientation="vertical">
            <ListView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:id="@+id/input_turno_dialog_listview_prefijos">

            </ListView>
      </LinearLayout>
      <Button
       android:id="@+id/btn_save"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="SAVE" />
</LinearLayout>