10

との活動がありFragmentDialogます。このonResumeダイアログで、コードで高さと重量を 80% と 90% に設定しました。

WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.copyFrom(getDialog().getWindow().getAttributes());
layoutParams.width = (int)(screenWidth * 0.9);
layoutParams.height = (int)(screenHeight * 0.8);

getDialog().getWindow().setAttributes(layoutParams);

それは完全に機能し、背景には影があり、前景FragmentDialogには適切な寸法があります。質問は - 影のない(影のあるもの、アクティビティ ビュー) のSnackBar影響を受けない画面の下部に表示するにはどうすればよいですか? FragmentDialogのバックグラウンドにあるアクティビティで特定のビューのシャドウを無効にする方法はありますFragmentDialogか?

4

2 に答える 2

0

遅くなりましたが、他の人に役立つと思われる解決策があります。
ダイアログ フラグメント シャドウ (実際には 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();
    }
}
于 2020-03-25T12:39:08.267 に答える