我正在构建自定义DialogFragment
。对话框布局设置为my_dialog.xml
,但如何修改对话框周围的颜色(透明灰色)?
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;
}
}
答案 0 :(得分:46)
我必须在对话框样式中将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);
}
}
答案 1 :(得分:26)
我想要DialogFragment
的透明背景,并且在代码中,这样可以正常工作:
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
window.setBackgroundDrawableResource(android.R.color.transparent);
}
当然,您可以使用Drawable
或setBackgroundDrawable()
指定任何颜色或setBackgroundDrawableResource()
。
这至少在 onStart()
中有效,但在onCreate()
中却无效,而且不一定在onCreateView()
,it seems中。
也就是说,在大多数情况下,按照以下方式执行此操作in XML, using styles可能更为清晰:
<style name="MyDialogStyle" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
</style>
答案 2 :(得分:15)
要获得完全透明的对话框,您可以在onCreateView
中设置以下
setBackgroundDrawable
至Color.TRANSPARENT
setDimAmount
至0
请参阅此处的代码示例:
public class TextEditor extends DialogFragment {
@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;
}
}
答案 3 :(得分:14)
我发现我只需要这样做:
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<!-- other attributes -->
<item name="android:backgroundDimEnabled">false</item>
</style>
答案 4 :(得分:2)
覆盖onCreate并设置样式应该有效。
@Override
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent);
}
答案 5 :(得分:2)
那些在“onCreateDialog
”而不是“onCreateView
”中使用AlertDialog构建器的人可以分配以下代码之类的主题。完整的主题集可以从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();
}
答案 6 :(得分:1)
我必须在这里设置风格:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialog );
答案 7 :(得分:0)
更改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
只需添加到您的布局或textview
android:background="#232323"
您可以将这些数字更改为您喜欢的任何颜色。或者您可以设置drawable
android:background="@drawable/yourpicturename"