Ошибка отображения диалогового окна пользовательского оповещения Android после изменения версии сборки - PullRequest
15 голосов
/ 30 сентября 2011

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

Это показывает мне идеальный результат, когда я создаю приложение в 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 here enter image description here

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

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

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 11 февраля 2012

Это решило мою проблему, изменив следующий код в XML-файле темы настраиваемого диалога.

<?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>
1 голос
/ 12 октября 2011

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

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

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

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

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

Так в вашем коде пишите только

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

вместо

super (context, themeid);

0 голосов
/ 01 октября 2011

Очевидно, это известная проблема .

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

Один из обходных путей - начать с почти пустой темы (например, Panel или Translucent), а затем визуализировать то, что вам нужно, в вашем собственном макете (например, краях диалогового окна и т. Д.).* Думаю, я все еще не до конца понимаю это решение.

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

...