2013-07-10 37 views
8

Tôi có một AlertDialog tùy chỉnh và tôi muốn làm cho nền của nó hoàn toàn trong suốt. Thông thường để thực hiện một hoạt động hoàn toàn trong suốt, tôi làm như sauandroid AlertDialog với nền trong suốt

  • bộ nền để #00000000 trong cách bố trí xml

  • trong manifest thiết android:theme="@android:style/Theme.Holo.Dialog" cho hoạt động này.

  • In onTạo thêm getWindow().setBackgroundDrawable(new ColorDrawable(0)).

    Nhưng bây giờ tôi đang đối phó với một hộp thoại, làm thế nào để tôi thực hiện tính minh bạch?

Đây là mã thoại:

LayoutInflater inflater = getLayoutInflater(); 
    View dialoglayout = inflater.inflate(R.layout.activity_mine1, 
     (ViewGroup) findViewById(R.layout.mine1)); 
    mine1 = new AlertDialog.Builder(this); 
    mine1.setView(dialoglayout); 
    mine1.show(); 

Và xml của tôi chỉ là một RelativeLayout với tầm con khác:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#00000000" > 

    ... 

</RelativeLayout> 

Lưu ý: Tôi đã xem xét một số bài viết tương tự ở đây , nhưng chúng dường như không hoạt động.

Lý do thực sự của tôi là nền mà tôi thực sự muốn sử dụng, không phải là hình chữ nhật. Tôi làm cho nó hoạt động trong một hoạt động. Nhưng tôi muốn sử dụng một hộp thoại thay thế.

EDIT:

Tiếp tục chơi xung quanh, tôi có điều này style.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
<style name="CustomDialog" parent="android:Theme.Holo.Dialog"> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowBackground">@android:color/transparent</item> 
    </style> 
</resources> 

Mà tôi thêm bao

new AlertDialog.Builder(this, R.style.CustomDialog) 
+0

attr 'dialogBackground' không được nhận dạng bởi nhật thực. –

Trả lời

5

Sử dụng hộp thoại thay vì AlertDialog.Builder và do đó hãy sử dụng setContentView thay vì setView.

8
<style name="CustomAlertDialog" parent="android:style/Theme.Dialog"> 
     <item name="android:windowBackground">@android:color/transparent</item> 
     <item name="android:windowIsFloating">true</item> 
     <item name="android:backgroundDimEnabled">true</item> 
     <item name="android:width">300dip</item> 
     <item name="android:textColor">#FFFFFF</item> 
    </style> 

      Dialog connectionDialog = new Dialog(this, R.style.CustomAlertDialog); 
      connectionDialog.setContentView(set your view here); 
      connectionDialog.show(); 
+0

Bạn hoàn thành nhiều như 'style.xml' của riêng tôi. Nền là hầu như không minh bạch; nó rất tối; bạn phải nhìn rất khó để thấy rằng có một số tính minh bạch yếu đang diễn ra. Tôi đang tìm kiếm '# 00000000'. Ngoài ra, vì một số lý do có một đường viền màu trắng xung quanh nền. –

+0

Thuộc tính chiều rộng 300dip không có hiệu lực. – usman

0

Hình như có liên quan đến android:backgroundDimEnabled và/hoặc android:backgroundDimAmount trong phong cách của bạn. Hãy xem câu trả lời này để biết thêm thông tin: Translucent Activity filling the entire screen

Bạn có thể thử đặt android:backgroundDimEnabled thành sai.

4
connectionDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
+0

giống như một sự quyến rũ – JannGabriel