2011-09-30 31 views
15

Tôi đang phát triển bản trình diễn đơn giản. Ở đây trong bản demo này, tôi chỉ tạo một hộp thoại cảnh báo tùy chỉnh đơn giản. Nó hoạt động tốt.Hộp thoại cảnh báo tùy chỉnh Android Hiển thị lỗi sau khi thay đổi Phiên bản xây dựng

Nó cho tôi thấy kết quả hoàn hảo khi tôi xây dựng ứng dụng trong 1,6, nhưng khi tôi thay đổi phiên bản Android từ 1,6 xuống 2,2, nó cho thấy kết quả không mong muốn. Nó không hiển thị màn hình nền mà tôi hiển thị hộp thoại cảnh báo tùy chỉnh.

Đây là tệp xml của tôi.Tuỳ chỉnh Dialog Theme file

<?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> 

Đây là CustomConfirmOkDialog Lớp tôi

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(); 
     } 
    } 

Calling lớp này từ hoạt động chính của tôi bằng cách sử dụng mã dưới đây.

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

enter image description here enter image description here

Ở đây bạn có thể nhận thấy rõ ràng rằng 1st image cho thấy nền. Bản dựng của nó trong phiên bản Android 1.6 trong khi 2nd image không hiển thị nền. Nó cho thấy toàn bộ màn hình màu đen. Xây dựng của nó trong phiên bản Android 2.2. Tôi rất biết ơn nếu có ai có thể giải quyết vấn đề này.

Có ai có thể giúp tôi giải quyết vấn đề đơn giản và ngớ ngẩn này không?

Cảm ơn trước.

+1

Khi bạn nói thay đổi phiên bản, bạn có nghĩa là phiên bản đích, min verion hoặc phiên bản tối đa không? Hay bạn chỉ đơn giản có ý nghĩa trên một thiết bị khác có phiên bản cao hơn? – Gallal

+0

Tôi đang nói về phiên bản mục tiêu xây dựng dự án. –

+0

nhận xét ngớ ngẩn nhưng tôi phải đối mặt với cùng một vấn đề như vậy ... bạn có đang thử bản demo trong trình giả lập với sdk 2.2 khiến thiết bị hoặc giả lập gây ra đôi khi chế độ xem không hiển thị hoàn hảo khi chạy phiên bản cao hơn cho trình mô phỏng hoặc thiết bị phiên bản thấp hơn. – MKJParekh

Trả lời

2

Giải quyết sự cố của tôi bằng cách thay đổi mã sau trong tệp xml Chủ đề của hộp thoại tùy chỉnh.

<?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

Dường như đây là known issue.

Điều này chỉ xảy ra khi bạn thử kế thừa từ chủ đề khung. Sử dụng @android:style trực tiếp sẽ vẫn coi chúng là không phải là toàn màn hình, sẽ nhấp qua nền đen như mong đợi.

Một giải pháp thay thế là bắt đầu với chủ đề gần như trống (như Bảng điều khiển hoặc Mờ) và sau đó hiển thị những gì bạn cần trong bố cục của riêng mình (chẳng hạn như cạnh hộp thoại, v.v.).

Suy nghĩ, tôi vẫn chưa hiểu đầy đủ về giải pháp này. Và thực tế, tôi không còn chắc chắn rằng họ đang nói về chính xác lỗi tương tự bạn đã thấy, vì họ đang nói về nó không hoạt động cho một phiên bản cũ của sdk (không phải là một phiên bản mới hơn như của bạn). Xem bug report.

1

Tôi cũng gặp phải vấn đề tương tự. vấn đề là khi tôi gọi constructor của lớp Dialog

Dialog (bối cảnh Bối cảnh, int themeId)

nó sẽ ẩn các hoạt động nền.Giải pháp duy nhất mà tôi tìm thấy là không gọi constructor này, thay vì chỉ gọi

Dialog (Context ngữ cảnh)

và thiết lập phong cách của bạn trong file layout.

Vì vậy, trong mã của bạn, chỉ viết

siêu (context)

thay vì

siêu (bối cảnh, themeid);

+1

Nó không cho kết quả phù hợp những gì tôi muốn. –