Android自定义alertdialog与ICS和Gingerbread不同

时间:2012-09-04 10:04:19

标签: android alertdialog

我有一个自定义alertdialog,它会扩展此自定义布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/infoLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:theme="@style/AppTheme" >


    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:weightSum="2" >

        <TextView
            android:id="@+id/infoVersionTitle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="right|center"
            android:text="@string/infoVersion"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/infoVersionTitleValue"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

    <TextView
        android:id="@+id/infoDetailText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout1"
        android:padding="10dp" />

</RelativeLayout>

我的清单文件中有这个:

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />
........
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"  >

我已经用这种方式定义了style.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppTheme" parent="android:Theme.Light"></style>
</resources>

style.xml v11定义如下:

<resources>
    <style name="AppTheme" parent="android:Theme.Light"></style>
</resources>

并且style.xml v14定义如下:

<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
</resources>

在4.0.3设备上运行时,它显示如下:

enter image description here

在2.3.3设备上运行,它显示如下:

enter image description here

在2.3.3设备上,文字几乎不可读,我想显示白色背景(包括标题栏)

是否可以在4.0.3上显示的所有设备上显示自定义alertdialog?

我看过this,但似乎无法弄明白。

任何解决方案?

3 个答案:

答案 0 :(得分:8)

在创建对话框时尝试调用AlertDialog.Builder#setInverseBackgroundForced(true)

答案 1 :(得分:1)

您可以将ActionBarSherlock用于此目的

Theming页面中查看对话框

中的说明

答案 2 :(得分:0)

确保所有设备的兼容性:

setInverseBackgroundForced(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? false
                                    : true)

这可以确保HoneyCromb以下的设备正常显示,下面的设备反转!

以下是一个例子:

final AlertDialog.Builder dialog = new AlertDialog.Builder(this)
dialog.setInverseBackgroundForced(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? false
                        : true);
dialog.setMessage("Test Dialog!");
dialog.create().show();

参见文档:

http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setInverseBackgroundForced(boolean)