Ответ 1
Try
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
в DialogFragment
onCreateView
Мне нужно создать диалог над фрагментом (который занимает весь экран). Диалог должен быть плавающим диалогом, который будет располагаться над фрагментом с фрагментом, затемненным вне фрагмента.
Для пользовательского диалога у меня есть 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 часа на это, я надеюсь, что кто-то еще может помочь...
Try
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
в DialogFragment
onCreateView
Попробуйте (Как создать 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();
В 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
прозрачный
Для полностью прозрачного использования: 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
Задайте свою тему, как это сработало для меня
<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);
}
}
Те, кто использует 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();
}
Попробуйте, если хотите:
public TransparentDialog()
{
super();
setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}