AlertDialog以及列表项和自定义主题

时间:2012-08-08 15:54:00

标签: android android-layout android-dialog

我找不到解决方案!我正在努力遵守Android 2.1及更高版本。

我尝试使用自定义主题创建AlertDialog的等效项。

我发现在API v.11之前无法在AlertDialog上应用主题。我尝试使用ContextThemeWrapper,但我找不到自定义按钮的解决方案。

对于一个简单的视图,我使用自己的内容视图创建自己的Dialog。我用主题做我想做的事。

但是,当我想要一个带有自定义主题和列表项的AlertDialog时,它会更复杂。我找不到在列表末尾添加按钮的解决方案。因为当列表太大时,按钮就在窗口之外。

我尝试过: - 一个RelativeLayout:     *标题     * ListView下面的标题     * ListView下方的按钮 - LinearLayout垂直

有人有想法吗?

我添加result needed

也许,我的最后一个也是非常难看的想法是用构建器创建一个普通的AlertDialog,用findViewById找到每个视图并应用所需的主题属性......但是我必须看看自从Android 2.1以来它们是不变的...

我的布局xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bw="http://schemas.android.com/apk/res-auto/com.levelup.beautifulwidgets"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:background="@drawable/ab_background"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:textColor="@color/grey_1"
        android:textSize="24dp" />

    <FrameLayout
        android:id="@+id/title_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:paddingRight="10dp" />

    <ListView
        android:id="@+id/container"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title" />

    <LinearLayout
        android:id="@+id/buttons"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@id/container"
        android:layout_marginTop="5dp"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/cancel_button"
            style="@style/DialogButton"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="-1dp"
            android:layout_weight="1"
            android:text="@string/cancel" />

        <Button
            android:id="@+id/ok_button"
            style="@style/DialogButton"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/ok" />
    </LinearLayout>

</RelativeLayout>

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。我是一个垂直的LinearLayout。所有视图的layout_weight都为0.只需ListView为1。

<?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="wrap_content"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/titleLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:padding="5dp" >

        <FrameLayout
            android:id="@+id/title_container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:paddingRight="10dp" />

        <TextView
            android:id="@+id/title"
            style="@style/Dialog.Title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_toLeftOf="@id/title_container" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/containerLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:background="@drawable/dialog_header_divider" />
    </RelativeLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:layout_weight="0"
        android:background="@color/grey_2" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/cancel_button"
            style="@style/Dialog.Button.Cancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="-1dp"
            android:layout_weight="1"
            android:text="@string/cancel" />

        <View
            android:id="@+id/buttonSeparator"
            android:layout_width="1dp"
            android:layout_height="fill_parent"
            android:layout_weight="0"
            android:background="@color/grey_2" />

        <Button
            android:id="@+id/ok_button"
            style="@style/Dialog.Button.Ok"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/ok" />
    </LinearLayout>

</LinearLayout>