虽然已经很晚了,但我认为以下解决方案可能对其他人有用。
如果要禁用对话框片段的阴影(实际上称为DIM),请在对话框片段的onResume
方法中添加以下代码。
对于Kotlin:
override fun onResume() {
super.onResume()
dialog?.window!!.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
对于Java:
@Override
public void onResume() {
super.onResume();
if(getActivity()!=null)
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
顺便说一下,这不完全是问题所问的,但这将省略掉对话框片段背后的所有阴影。
为了在您的父片段中显示 Snackbar 而不是在对话框片段中,您可以将父片段引用传递给对话框片段构造函数,并使用父视图实例化 Snackbar。这将在父片段底部显示 Snackbar。
showSnackbar
方法应该像这样编写:
对于 Kotlin:
private fun showSnackbar(messege: String) =
Snackbar.make(parent.view!!, messege, Snackbar.LENGTH_SHORT).show()
For Java:
private void showSnackBar(String messege) {
if (parent.getView() != null)
Snackbar.make(parent.getView(), messege, Snackbar.LENGTH_SHORT).show();
}
对话框片段的完整代码如下:
对于Kotlin:
class MyDialogFramgent(parent: Fragment) : DialogFragment() {
override fun onResume() {
super.onResume()
dialog?.window!!.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
private fun showSnackbar(messege: String) =
Snackbar.make(parent.view!!, messege, Snackbar.LENGTH_SHORT).show()
}
对于Java:
public class MyDialogFragment extends DialogFragment {
private Fragment parent;
public MyDialogFragment(Fragment parent) {
this.parent = parent;
}
@Override
public void onResume() {
super.onResume();
if (getActivity() != null)
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
private void showSnackBar(String messege) {
if (parent.getView() != null)
Snackbar.make(parent.getView(), messege, Snackbar.LENGTH_SHORT).show();
}
}