自定义样式AlertDialog的样式属性

时间:2011-09-04 21:53:51

标签: android android-layout dialog styles alertdialog

我正在尝试设置我的AlertDialog并且我已经能够通过样式和xml声明更改大部分内容......但仍然存在一些问题:

  1. 如何将标题栏周围的区域从黑色更改为自定义颜色?
  2. 如何将外部背景更改为透明(阴影所在的外部部分为蓝色)
  3. 如何更改按钮以使它们不与警报消息周围的黑色边框重叠?
  4. The AlertDialog

    这是我在RootActivity中的功能(我的活动扩展了这个)

    public static void showNoConnectionDialog(Context ctx1) {
        final Context ctx = ctx1;
        LayoutInflater factory = LayoutInflater.from(ctx);
        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, R.style.SetdartDialog));
        builder.setView(factory.inflate(R.layout.alert_dialog, null))
        .setIcon(R.drawable.icon)
        .setCancelable(true)
        .setMessage(R.string.check_wireless_settings)
        .setTitle(R.string.no_connection)
        .setPositiveButton(R.string.myes, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                ctx.startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
            }
        })
        .setNegativeButton(R.string.mno, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                return;
            }
        })
        .setOnCancelListener(new DialogInterface.OnCancelListener() {
            public void onCancel(DialogInterface dialog) {
                return;
            }
        })
        .show();
    }
    

    这里是styles.xml的片段

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="Theme.WhiteBackground" parent="android:Theme">
            <item name="android:windowBackground">@null</item>
            <item name="android:background">@android:color/white</item>
            <!-- Dialog attributes
            <item name="alertDialogStyle">@style/AlertDialog</item>  -->
        </style>
        <style name="SetdartDialog">
                <item name="android:background">@color/sd_blue</item> <!-- MUST HAVE with white bg-->
                <!--<item name="android:windowBackground">@color/sd_blue</item> -->
                <!--<item name="android:windowBackground">@color/transparent</item> needed with white bg ? -->
                <item name="android:windowFrame">@color/transparent</item><!-- not sure what this changes-->
                <item name="android:textColor">@android:color/black</item>
                <item name="android:windowNoTitle">true</item>
                <item name="android:textSize">10sp</item>
                <item name="android:windowIsFloating">true</item>
                <item name="android:windowContentOverlay">@color/transparent</item>
                <item name="android:windowTitleStyle">@style/setwindowTitleStyle</item>
                <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
                <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
                <item name="android:backgroundDimEnabled">true</item>
                <item name="android:gravity">center_vertical|center_horizontal</item>
            <!--<item name="android:colorBackgroundCacheHint">@android:color/white</item>-->
            </style>
            <style name="setwindowTitleStyle">
                <item name="android:textColor">@android:color/white</item>
                <item name="android:background">@color/sd_blue</item>
            </style>
    </resources>
    

    还有R.layout.alert_dialog

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <LinearLayout
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:orientation="vertical">
        </LinearLayout>
    </ScrollView>
    

2 个答案:

答案 0 :(得分:6)

使用您提到的所有这些属性创建自定义布局。使用Dialog代替AlertDialog,使您创建的布局膨胀,使用Dialog对象设置膨胀布局。如果您还没有介绍过膨胀服务,请做一些研究。在明确了充气之后,请记住使用View对象访问的对话框的所有组件,这些组件是通过膨胀创建的。其余的(如点击听众)仍然需要按常规方式完成。干杯。我希望它有所帮助。

答案 1 :(得分:0)

要制作自定义AlertDialog,您应该扩展DialogFragment