Как изменить цвет фона вокруг диалогового окна?
Я создаю пользовательский 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;
}
}
Ответы
Ответ 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 );