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

Как изменить цвет фона вокруг диалогового окна?

Я создаю пользовательский DialogFragment. Макет диалога установлен на my_dialog.xml, но как я могу изменить цвет вокруг диалогового окна (прозрачный серый)?

enter image description here

my_dialog.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" >

    <TextView
        android:id="@+id/hello"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@android:color/holo_orange_light"
        android:gravity="center"
        android:text="hello" />

</RelativeLayout>

MyDialogFragment.java

public class MyDialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.my_dialog, container);

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

        return view;
    }
}
4b9b3361

Ответ 1

Мне пришлось установить android:windowIsFloating в false и android:windowBackground в свой собственный цвет в стиле диалога:

styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="MyDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@color/orange_transparent</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:gravity">center</item>
    </style>

</resources>

MyDialogFragment

public class MyDialogFragment extends DialogFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.MyDialog);
    }
}

Ответ 2

Мне нужен прозрачный фон для моего DialogFragment, а в коде это прекрасно работает:

@Override
public void onStart() {
    super.onStart();

    Window window = getDialog().getWindow();
    window.setBackgroundDrawableResource(android.R.color.transparent);
}

Конечно, вы можете указать любой цвет или Drawable с помощью setBackgroundDrawable() или setBackgroundDrawableResource().

Это работает, по крайней мере, в onStart(), но не в onCreate(), и не обязательно в onCreateView(), кажется.

Тем не менее, в большинстве случаев это, возможно, более чистое, чтобы сделать это в XML, используя стили, в следующих строках:

<style name="MyDialogStyle" parent="@android:style/Theme.Holo.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

Ответ 3

Я нашел, что мне просто нужно было сделать это:

<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <!--  other attributes  -->
    <item name="android:backgroundDimEnabled">false</item>
</style>

Ответ 4

Чтобы получить полностью прозрачное диалоговое окно, вы можете установить в onCreateView следующие

  • setBackgroundDrawable to Color.TRANSPARENT
  • setDimAmount to 0

См. пример кода здесь:

public class TextEditor extends DialogFragment {

    public TextEditor () {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_text_editor, container);

        // make dialog itself transparent
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        // remove background dim 
        getDialog().getWindow().setDimAmount(0);

        //[add more custom code here...]

        return view;
    }
}

Ответ 5

Переопределение onCreate и настройка стиля там должны работать.

@Override
public void onCreate(Bundle savedInstance){
    super.onCreate(savedInstance);
    setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent);
}

Ответ 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

измените текст Background на XML Я только что отредактировал ваш код, заменив его на свой

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >

<TextView
    android:id="@+id/hello"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:gravity="center"
    android:text="hello" />

потому что вы дали высоту и ширину TextView 100dp. и установите фон для него, который заполнит весь диалог. так как ваш основной макет - wrap_content. пожалуйста, примите ответ, если это вам помогло.
Изменить: изменить Background просто добавьте в свой макет или в свое текстовое изображение android:background="#232323" вы можете изменить это число до любого цвета, который вам нравится. или вы можете установить фон из drawable как android:background="@drawable/yourpicturename"

Ответ 8

Ответ Jul был почти хорош для меня. Но, похоже, он не работает при использовании AlertDialog.Builder.

Мне нужно было установить стиль здесь:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialog );