自定义样式AlertDialog的样式属性

Tra*_*onk 7 android styles dialog android-layout android-alertdialog

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

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

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();
}
Run Code Online (Sandbox Code Playgroud)

这里是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>
Run Code Online (Sandbox Code Playgroud)

还有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>
Run Code Online (Sandbox Code Playgroud)

Nik*_*ski 6

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