How to achieve a full-screen dialog as described in material guidelines?

前端 未结 3 1013
猫巷女王i
猫巷女王i 2021-02-01 03:59

Material guidelines describe the behavior of a full-screen dialog.

Full-screen dialog | Dialogs - Material Design

How can I achieve

3条回答
  •  Happy的楠姐
    2021-02-01 04:17

    The answer from Boss is correct, but missing the requested action bar as displayed on link in the question.

    So, full example below.

    Dialog fragment:

    public class AKDialogFragment extends DialogFragment {
    
    private static final String TAG = "AKDialogFragment";
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        View rootView = inflater.inflate(R.layout.dialog_ak, container, false);
    
        Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar);
        toolbar.setTitle("Dialog title");
    
        ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
    
        ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeButtonEnabled(true);
            actionBar.setHomeAsUpIndicator(android.R.drawable.ic_menu_close_clear_cancel);
        }
        setHasOptionsMenu(true);
        return rootView;
    }
    
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }
    
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        getActivity().getMenuInflater().inflate(R.menu.menu_ak, menu);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
    
        if (id == R.id.action_save) {
            // handle confirmation button click here
            return true;
        } else if (id == android.R.id.home) {
            // handle close button click here
            dismiss();
            return true;
        }
    
        return super.onOptionsItemSelected(item);
    }
    }
    

    Layout dialog_ak.xml:

    
    
    
    
    
        
    
    
    
    
    
        
    
    
    
    
    

    Menu menu_ak.xml

    
      
    
    

    Hosting activity must extend AppCompatActivity. Launching dialog is the same as in Boss answer:

    FragmentManager fragmentManager = getSupportFragmentManager();
    AKDialogFragment newFragment = new AKDialogFragment();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    transaction.add(android.R.id.content, newFragment).addToBackStack(null).commit();
    

    I hope it helps someone.

提交回复
热议问题