Подтвердить что ты не робот

Невозможно сделать пользовательский диалог DialogFragment прозрачным над фрагментом

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

Для пользовательского диалога у меня есть linearLayout с изогнутыми краями, независимо от того, что я делаю, диалог имеет черное граничащее со всех сторон (очень малое). Я пробовал все, чтобы сделать его прозрачным и уйти (так что все диалоговое окно представляет собой только линейный макет - изогнутый блок)

Для DialogFragment это то, что у меня есть для onCreateView

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
    LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
    populateItemData(item, inflater);
    return layout;
}

custom_dialog - это просто LinearLayout, у которого есть андроид: backgroung установлен на # 000000

Это мой стиль для пользовательского диалога

<style name="CustomDialog" parent="android:style/Theme.Dialog">
    <item name="android:windowBackground">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:alwaysDrawnWithCache">false</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

Я пробовал всевозможные комбинации в этом стиле (из того, что я видел в Интернете), и я не могу избавиться от этого досадного черного гранича, я могу нарисовать его белым или любым другим цветом, если я установил этот фон LinearLayout ничего, кроме # 000000...

Я потратил буквально 3-4 часа на это, я надеюсь, что кто-то еще может помочь...

4b9b3361

Ответ 1

Try

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

в DialogFragment onCreateView

Ответ 2

Попробуйте (Как создать 100% -ый пользовательский диалог DialogFragment) эта работа для диалога

    Dialog dialog = new Dialog(getActivity());

    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

        // layout to display
    dialog.setContentView(R.layout.add_edit);

    // set color transpartent
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    dialog.show();

Ответ 3

В onActivityCreated

getDialog().getWindow().getAttributes().alpha = 0.9f; // An alpha value to apply to this entire window. An alpha of 1.0 means fully opaque and 0.0 means fully transparent

для DialogFragment прозрачный

Ответ 4

Для полностью прозрачного использования: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

Для пользовательского фона создайте файл стиля в папке значений (values ​​/style.xml) и используйте его: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);

в вашем файле стиля переопределить атрибут: android: windowBackground будет @color/DialogBackgroundBlackSemiTransparent

Ответ 5

Задайте свою тему, как это сработало для меня

<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

И в вашем диалоговом окне диалога, подобном этому

public class Progress extends DialogFragment {


int style = DialogFragment.STYLE_NO_TITLE;
int theme = R.style.MyDialog;

public Progress() {
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(style, theme);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.progress, container, false);
}
}

Ответ 6

Те, кто использует AlertDialog builder в onCreateDialog вместо onCreateView, могут назначать тему, такую ​​как следующий код. Полный набор тем можно найти из R.style. Не забывайте, что некоторые из них поддерживались в последнее время и недоступны на старых телефонах устройств.

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Translucent);
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
        builder.setView(view);

        return builder.create();
    }

Ответ 7

Попробуйте, если хотите:

public TransparentDialog()
{
    super();
    setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}