2011-09-30 12 views
15

私は簡単なデモを開発中です。このデモでは、簡単なカスタムアラートダイアログを作成しています。それはうまく動作します。Androidカスタム警告ダイアログ表示ビルドバージョンを変更した後のエラー

私はアプリケーションを1.6でビルドすると完璧な結果を示しますが、Androidのバージョンを1.6から2.2に変更すると、予期しない結果が表示されます。カスタムアラートダイアログを表示する背景画面は表示されません。

ここにmy 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は背景を示していることに気づくことができます。 2nd imageはバックグラウンドを表示しませんが、アンドロイド1.6バージョンでビルドします。黒い画面全体が表示されます。 Android 2.2でビルドされています。誰もがこの問題を解決できるなら、私は非常に感謝しています。

誰も私がこのシンプルで馬鹿馬鹿しい問題を解決するのを助けることができますか?

ありがとうございました。

+1

バージョンを変更すると、ターゲットバージョン、最小バージョン、または最大バージョンを意味しますか?それとも、より高いバージョンの別のデバイスを意味するのでしょうか? – Gallal

+0

私はプロジェクトビルドターゲットバージョンについて話しています。 –

+0

愚かなコメントですが、私は同じ問題に直面しています...あなたはsdk 2.2でエミュレータのデモをテストしていますか?デバイスやエミュレータが原因で、バージョンエミュレータやデバイスを下位バージョンのアプリケーションを実行しているときに、 – MKJParekh

答えて

2

カスタムダイアログテーマ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> 
0

明らかに、これはknown issueです。

これは、フレームワークのテーマからを継承しようとすると発生します。です。 @android:styleを直接使用すると、それらを非 フルスクリーンとして扱うことができます。これは、期待どおりに黒の背景をパンチします。

ほとんどの空白のテーマ(Panelや Translucentなど)から始めて、自分のレイアウトに必要なもの(たとえば、 ダイアログのエッジなど)をレンダリングすることで回避できます。

私はまだこの解決方法をまだ完全に理解していません。

実際、あなたが見たのとまったく同じバグについて話していることはもう分かりません.SDKの古いバージョン(あなたのような新しいものではない)。 bug reportを参照してください。

1

私も同じ問題に直面しました。私はそれがバックグラウンドアクティビティを非表示になります

ダイアログクラス

ダイアログ(コンテキストコンテキスト、int型themeId)のコンストラクタ呼び出されたときに問題があります。私が見つけた唯一の解決策は、このコンストラクタを呼び出す代わりにのみ呼び出す

ダイアログ(コンテキストコンテキスト)

とレイアウトファイルで、あなたのスタイルを設定していないです。

だからあなたのコードの中で、唯一の代わり

スーパー(文脈、themeid)の

スーパー(コンテキスト)

を書きます。

+1

それは私が欲しいものを適切な結果を与えるものではありません。 –

関連する問題