Атрибуты стиля пользовательского стиля AlertDialog - PullRequest
6 голосов
/ 05 сентября 2011

Я пытаюсь стилизовать свой AlertDialog, и я смог изменить большую его часть с помощью стилей и объявлений XML ... но есть еще несколько проблем:

  1. Как изменить область вокруг строки заголовка с черного на мой собственный цвет?
  2. Как изменить внешний фон на прозрачный (внешняя часть синего цвета, на которую падает тень)
  3. Как изменить кнопки, чтобы они не перекрывали черную рамку вокруг предупреждающего сообщения?

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 ]

6 голосов
/ 05 сентября 2011

Создайте свой собственный макет со всеми упомянутыми вами атрибутами.Используйте Dialog вместо AlertDialog, надуйте созданный вами макет, используйте объект Dialog, чтобы установить раздутый макет.Если вы еще не знакомы с раздутым сервисом, проведите небольшое исследование.После того как вы очиститесь от надувания, помните, что все компоненты диалогового окна, к которому вы обращаетесь с помощью объекта View, который вы создали с помощью надувания.Остальное (как слушатели кликов) еще предстоит сделать обычным способом.Приветствия.Надеюсь, это поможет.

0 голосов
/ 07 июля 2014

Для создания пользовательского AlertDialog вы должны расширить DialogFragment

...