Cosimo Sguanci Cosimo Sguanci - 2 months ago 26
Android Question

Adding Ok/Cancel buttons to DialogFragment

I have a dialog Fragment and i would like to put the ok/cancel buttons in the bottom of the dialog. I tried but the only thing i got was the buttons over the edit text (that is in the DialogFragment). Thisi is my dialog:
enter image description here

And this is my dialog code:

public class dialogNewFile extends DialogFragment {
private EditText textNewFile;

public dialogNewFile(){}

public static dialogNewFile newIstance(String title){
dialogNewFile frag=new dialogNewFile();
Bundle args=new Bundle();
args.putString("title",title);
frag.setArguments(args);
return frag;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedIstanceState ){
return inflater.inflate(R.layout.fragment_newfile,container);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedIstanceState){
super.onViewCreated(view, savedIstanceState);
textNewFile=(EditText) view.findViewById(R.id.edit_text_newfile);
String title=getArguments().getString("title","Enter name");
getDialog().setTitle(title);
textNewFile.requestFocus();
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
}

@Override
public void onResume() {
Window window = getDialog().getWindow();
Point size = new Point();
// Store dimensions of the screen in `size`
Display display = window.getWindowManager().getDefaultDisplay();
display.getSize(size);
// Set the width of the dialog proportional to 75% of the screen width
window.setLayout((int) (size.x * 0.75), (int) (size.x * 0.50));
window.setGravity(Gravity.CENTER);
// Call super onResume after sizing
super.onResume();

}


this is the layout of the dialog fragment:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:id="@+id/dialogNewFile">

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="35dp"
android:hint="@string/hint_new_file"
android:inputType="text"
android:id="@+id/edit_text_newfile"/>

</LinearLayout>

Answer

You shall override onCreateDialog and use AlertDialog.Builder to set the Positive and Negative buttons something like below:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    String title = getArguments().getString("title");
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(title);
    builder.setMessage("Are you sure?");

    // Overriding onCreateView is not necessary in your case
    LayoutInflater inflater = LayoutInflater.from(getContext());
    View newFileView = inflater.inflate(R.layout.fragment_newfile, null);
    builder.setView(newFileView);

    builder.setPositiveButton("OK",  new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // on success
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });

    return builder.create();
}
Comments