Сделать диалоговое окно предупреждений прозрачным

Я создаю диалоговое окно предупреждения на Android Jelly Beans OS. Все работает хорошо, но я хочу, чтобы вместо черного фона диалогового окна оповещения мне нужен прозрачный фон. Я читал так много статей и вопрос пользователя о stackoverflow, но ни один из них не помогает мне.

Вот мой код:

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.CustomAlertDialog); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog1, int which) { gActivityResult = REQUEST_PICK_CONTACT; onResume(); return; } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog1, int which) { return; } }); View view = getLayoutInflater().inflate(R.layout.alert_dialog, null); builder.setTitle(R.string.gender_age); builder.setInverseBackgroundForced(false); builder.setView (view); dialog = builder.create (); 

Вот мой CustomAlertDialog, который определяется в res / values ​​/ styles.xml

 <style name="CustomAlertDialog" parent="@android:style/Theme.Dialog"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowBackground">@color/transparent_color</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:colorBackgroundCacheHint">@null</item> <item name="android:gravity">left</item> </style> 

Вот цвет.xml

 <resources> <color name="transparent_color">#00000000</color> </resources> 

Но это мне не помогло.

Мой вопрос: это выполнимо? Если да, можете ли вы направить меня в правильном направлении?

Если вы не читали атрибуты стиля пользовательского стиля AlertDialog , вам следует идти дальше и читать. Ответ предполагает использовать Dialog вместо Alert Dialog . Кроме того, чтение Почему LayoutInflater игнорирует параметры layout_width и layout_height, которые я указал? Проблема с LayoutInflater может немного LayoutInflater . Надеюсь, поможет. Попробуйте и дайте мне знать, если это сработает.

Я нашел этот способ, совместимый с AlertDialog.Builder. Используя кнопку «Dump View Hierarchy» на вкладке «Устройства» в Eclipse, я увидел много вложенных FrameLayouts, и казалось, что в них находится фон, а также окно.

Перемещение этих представлений и настройка фона на прозрачный на каждом фактически работающем (мой пользовательский вид затем плавает по тусклому приложению, без фреймов или фонов, и нет изменений в макете). У меня был пользовательский вид, поэтому он переселился с него, но переключение ViewGroups из окна также должно работать.

Я использую AlertDialog.Builder в своем подклассе DialogFragment с пользовательским представлением.

  @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); configureDialogBuilder(builder); final LayoutInflater inflater = getActivity().getLayoutInflater(); customView = inflater.inflate(customViewId, null); builder.setView(customView); final AlertDialog dialog = builder.create(); return dialog; } @Override public void onStart() { super.onStart(); clearBackgrounds(customView); } private void clearBackgrounds(View view) { while (view != null) { view.setBackgroundResource(android.graphics.Color.TRANSPARENT); final ViewParent parent = view.getParent(); if (parent instanceof View) { view = (View) parent; } else { view = null; } } } 

Мне нужно было сделать что-то подобное для одного из моих проектов. То, что я сделал, было создать Activity только для AlertDialog .

Не уверен, что это то, что вам нужно, но отправляйте его здесь, если это вам поможет …

Мероприятия

 public class ShowAlertDialogActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alert_dialog); AlertDialog.Builder builder = new AlertDialog.Builder(this); // create the builder AlertDialog alert = builder.create(); alert.show(); } } 

И я устанавливаю фон прозрачным в макете ( alert_dialog.xml ) …

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@android:color/transparent"> </LinearLayout> 

И добавил активность к манифесту …

 <activity android:name=".ShowAlertDialogActivity" android:label="@string/app_title" android:theme="@style/AppTheme" android:launchMode="singleTask" /> 

Это помогло мне.

Надеюсь это поможет.

Просто звоните,

 customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

Непосредственно перед

 customDialog.show();