Intereting Posts
Просмотр анимации не меняет зону касания Как заставить ADB работать с Linux с помощью Motorola Ошибка сборки Android-градиента: ошибка захвата 137 Ширина представления не изменяется после масштабирования ObjectAnimator Как обновить отправку данных службе, используя намерение, когда служба запускается диспетчером аварийных сигналов? Как отключить функцию обратной связи всякий раз, когда мое приложение активно? Android SurfaceView Preview Blurry Как определить размер макета? Android lint исключить тестовые каталоги игнорировать в config не работает Конечная дата больше, чем андроид проверки даты начала Android Firebase чат RecyclerView автоматически прокручивается вниз при добавлении нового элемента Как применить тему в зависимости от версии Android Android N изменяет язык программным путем Нажмите на пункт «Ящик навигации», появится новый список в навигационном ящике Как вы серым нажатием кнопки «Отправить», когда определенные поля EditText пусты?

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

Я создаю диалоговое окно предупреждения на 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();