遅くなりましたが、他の人に役立つと思われる解決策があります。
ダイアログ フラグメント シャドウ (実際には DIM と呼ばれます) を無効にするには、以下のコードをダイアログ フラグメントonResume
メソッドに追加します。
コトリンの場合:
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);
}
これにより、これはまさに質問が求めているものではありませんが、これにより、ダイアログフラグメントの背後にあるすべての影が省略されます。
ダイアログ フラグメントではなく親フラグメントにスナックバーを表示するには、親フラグメント参照をダイアログ フラグメント コンストラクターに渡し、親のビューでスナックバーをインスタンス化します。これにより、親フラグメントの下部にスナックバーが表示されます。
showSnackbar
メソッドは次のようになります:
Kotlin の場合:
private fun showSnackbar(messege: String) =
Snackbar.make(parent.view!!, messege, Snackbar.LENGTH_SHORT).show()
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() {
// class code ...
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();
}
}