如何在 android 中显示全屏片段 activity?
how to show full screen fragment activity in android?
我知道如何显示全屏 activity 但它在片段 activity 中不起作用?
public class Dialog extends Fragment {
public Dialog() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog, container, false);
}
}
尝试使用DialogFragment
:
public class FullScreenDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog, container, false);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
}
}
在您的问题中,您问过如何显示全屏片段activity?
如果你知道如何使activity全屏。您必须使用相同的方法来使 FragmentActivity
全屏显示。因为 FragmentActivity
是 Activity
的子 class。
↳ android.app.Activity
↳ android.support.v4.app.FragmentActivity
同样在您的问题中,您包含的 class 是 Fragment
,而不是 FragmnetActivity
。
如果你需要让你的片段全屏,你必须让你的主机activity全屏。
使用 getActivity()
方法从片段中获取宿主 activity。然后就可以全屏了。
@shmakova 的回答对我有用,但后来我的同事指出了一个更简单的解决方案。对话框的样式继承自名称以 NoTitleBar.Fullscreen
结尾并添加 windowNoTitle
元素的样式就足够了。例如:
在我的对话框中:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AppCompatDialog(getActivity(), R.style.MyDialogStyle);
}
在src/main/res/values/styles.xml
中:
<style name="MyDialogStyle" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
<item name="windowNoTitle">true</item>
</style>
这种方法有几个优点:您不必覆盖 onCreateDialog
并且可以有多个 styles.xml
实例,具体取决于设备功能。例如,您可以只在较小的屏幕上将对话框扩展到全屏。
试试这个解决方案
public class setWallpaperFragment extends DialogFragment {
public setWallpaperFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int theme = android.R.style.Theme_Black_NoTitleBar_Fullscreen;
setStyle(DialogFragment.STYLE_NO_TITLE,theme);
}
我知道如何显示全屏 activity 但它在片段 activity 中不起作用?
public class Dialog extends Fragment {
public Dialog() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog, container, false);
}
}
尝试使用DialogFragment
:
public class FullScreenDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog, container, false);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
}
}
在您的问题中,您问过如何显示全屏片段activity?
如果你知道如何使activity全屏。您必须使用相同的方法来使 FragmentActivity
全屏显示。因为 FragmentActivity
是 Activity
的子 class。
↳ android.app.Activity
↳ android.support.v4.app.FragmentActivity
同样在您的问题中,您包含的 class 是 Fragment
,而不是 FragmnetActivity
。
如果你需要让你的片段全屏,你必须让你的主机activity全屏。
使用 getActivity()
方法从片段中获取宿主 activity。然后就可以全屏了。
@shmakova 的回答对我有用,但后来我的同事指出了一个更简单的解决方案。对话框的样式继承自名称以 NoTitleBar.Fullscreen
结尾并添加 windowNoTitle
元素的样式就足够了。例如:
在我的对话框中:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AppCompatDialog(getActivity(), R.style.MyDialogStyle);
}
在src/main/res/values/styles.xml
中:
<style name="MyDialogStyle" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
<item name="windowNoTitle">true</item>
</style>
这种方法有几个优点:您不必覆盖 onCreateDialog
并且可以有多个 styles.xml
实例,具体取决于设备功能。例如,您可以只在较小的屏幕上将对话框扩展到全屏。
试试这个解决方案
public class setWallpaperFragment extends DialogFragment {
public setWallpaperFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int theme = android.R.style.Theme_Black_NoTitleBar_Fullscreen;
setStyle(DialogFragment.STYLE_NO_TITLE,theme);
}