Ошибка пользовательского предупреждения Android Custom после изменения версии сборки

Я разрабатываю простое демо. Здесь, в этой демонстрации, я просто создаю один простой настраиваемый диалог оповещений. Он отлично работает.

Это показывает мне идеальный результат, когда я создаю приложение в версии 1.6, но когда я изменяю версию для Android от 1.6 до 2.2, он показывает неожиданный результат. Он не показывает фоновый экран, на котором отображается пользовательское диалоговое окно предупреждений.

Вот мой xml файл. Пользовательский файл диалогового окна

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomDialogTheme" parent="@android:style/AlertDialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowAnimationStyle">@android:style/Theme.Dialog</item>
    </style>
</resources>

Вот мой класс CustomConfirmOkDialog

package com.utility.org;

import android.app.Activity;
import android.app.Dialog;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

    public class CustomConfirmOkDialog extends Dialog implements OnClickListener
    {
        private Button okButton = null;
        private TextView infoText=null,confirmBody=null;
        private int errorMessage=0;
        @SuppressWarnings("unused")
        private Activity activity;

        public CustomConfirmOkDialog(Activity context,int customdialogtheme,int errorMessage) 
        {
            super(context,customdialogtheme);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.confirm_ok);
            this.errorMessage = errorMessage;
            this.activity = context;
            initControls();
        }

        private void initControls()
        {
            okButton = (Button) findViewById(R.id.ok_button);
            okButton.setOnClickListener(this);

            infoText = (TextView)findViewById(R.id.infoText);
            confirmBody = (TextView)findViewById(R.id.confirmBody);

            switch (this.errorMessage) 
            {

                case Utility.INVALID_USERNAME_PASSWORD:
                    try
                    {
                        infoText.setText(R.string.signIn);
                        confirmBody.setText(R.string.invalidUsernameAndPassword);
                    }
                    catch (Exception e) 
                    {
                        e.printStackTrace();
                    }
                    break;


                default:
                    break;
            }
        }
        public void onClick(View v) 
        {
            dismiss();
        }
    }

Вызов этого класса из моего основного действия с использованием приведенного ниже кода.

CustomConfirmOkDialog dialog = new CustomConfirmOkDialog(MainActivity.this, R.style.CustomDialogTheme, Utility.INVALID_USERNAME_PASSWORD);
dialog.show();

enter image description hereenter image description here

Здесь вы можете четко заметить, что 1st image показывает фон. Его сборка в версии android 1.6, а 2nd image не отображает фон. Он показывает весь черный экран. Его встроенная версия Android 2.2. Я очень благодарен, если кто-то может решить эту проблему.

Может ли кто-нибудь помочь мне решить эту простую и глупую проблему?

Спасибо в Advance.

Ответы

Ответ 1

Он разрешил мою проблему, изменив следующий код в XML файле Custom Dialog Theme.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomDialogTheme" parent="@android:style/Theme.Translucent.NoTitleBar">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

Ответ 2

Я также столкнулся с той же проблемой. проблема в том, что я вызывал конструктор класса Dialog

Диалог (контекстный контекст, int themeId)

он скроет фоновой активности. Единственное решение, которое я нашел, не вызывает этот конструктор, а только вызывает

Диалог (контекстный контекст)

и установите стиль в файле макета.

Итак, в вашем коде напишите

супер (контекст)

вместо

супер (контекст, тема);

Ответ 3

По-видимому, это известная проблема.

Это происходит только при попытке наследовать из тем фреймворка. Использование @android:style напрямую будет обрабатывать их как не- полноэкранный режим, который пробивает черный фон, как ожидалось.

Один способ обхода - начать с почти пустой темы (например, панели или Прозрачный), а затем визуализировать то, что вам нужно в вашем собственном макете (например, края диалога и т.д.).

Мысль, я до сих пор еще не совсем понимаю это решение.

И на самом деле, я не уверен, что они говорят о той же ошибке, что и вы, потому что они говорят о том, что она не работает для более старой версии sdk (а не более новой, такой как ваша), См. Отчет об ошибке .