Sometimes in AlertDialog, there is a need to get input from the user or customize it according to our requirements. So we create custom AlertDialogs. This post will show how to customize the AlertDialogs and take input from it.
Below is the step-by-step implementation of the above approach:
Step 1: Create an XML file custom_layout.xml
Add the below code in custom_layout.xml. This code defines the alert dialog box dimensions and adds an edit text to it.
XML
<? xml version = "1.0" encoding = "utf-8" ?>     android:layout_width = "match_parent"     android:layout_height = "match_parent"     android:orientation = "vertical"     android:paddingLeft = "20dp"     android:paddingRight = "20dp" >       < EditText         android:id = "@+id/editText"         android:layout_width = "match_parent"         android:layout_height = "wrap_content" /> </ LinearLayout > |
Step 2: Add a Button in activity_main.xml
The button when clicked will show the AlertDialog box.Â
XML
<? xml version = "1.0" encoding = "utf-8" ?>     android:id = "@+id/root"     android:layout_width = "match_parent"     android:layout_height = "match_parent"     android:gravity = "center"     android:orientation = "vertical"     tools:context = ".MainActivity" >       < Button         android:layout_width = "match_parent"         android:layout_height = "wrap_content"         android:onClick = "showAlertDialogButtonClicked"         android:text = "Show Dialog" /> </ LinearLayout > |
Step 3: Add custom_layout.xml file
Add custom_layout.xml in that activity in which you want to show a custom alert dialog here it is added in MainActivity.
Java
import android.os.Bundle; import android.view.View; import android.widget.EditText; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity;   public class MainActivity extends AppCompatActivity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super .onCreate(savedInstanceState);         setContentView(R.layout.activity_main);     }       public void showAlertDialogButtonClicked(View view) {         // Create an alert builder         AlertDialog.Builder builder = new AlertDialog.Builder( this );         builder.setTitle( "Name" );           // set the custom layout         final View customLayout = getLayoutInflater().inflate(R.layout.custom_layout, null );         builder.setView(customLayout);           // add a button         builder.setPositiveButton( "OK" , (dialog, which) -> {             // send data from the AlertDialog to the Activity             EditText editText = customLayout.findViewById(R.id.editText);             sendDialogDataToActivity(editText.getText().toString());         });         // create and show the alert dialog         AlertDialog dialog = builder.create();         dialog.show();     }       // Do something with the data coming from the AlertDialog     private void sendDialogDataToActivity(String data) {         Toast.makeText( this , data, Toast.LENGTH_SHORT).show();     } } |
Kotlin
import android.content.DialogInterface import android.os.Bundle import android.view.View import android.widget.EditText import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity   class MainActivity : AppCompatActivity() {     override fun onCreate(savedInstanceState: Bundle?) {         super .onCreate(savedInstanceState)         setContentView(R.layout.activity_main)     }       fun showAlertDialogButtonClicked() {         // Create an alert builder         val builder = AlertDialog.Builder( this )         builder.setTitle( "Name" )           // set the custom layout         val customLayout: View = layoutInflater.inflate(R.layout.custom_layout, null )         builder.setView(customLayout)           // add a button         builder.setPositiveButton( "OK" ) { dialog: DialogInterface?, which: Int ->             // send data from the AlertDialog to the Activity             val editText = customLayout.findViewById<EditText>(R.id.editText)             sendDialogDataToActivity(editText.text.toString())         }         // create and show the alert dialog         val dialog = builder.create()         dialog.show()     }       // Do something with the data coming from the AlertDialog     private fun sendDialogDataToActivity(data: String) {         Toast.makeText( this , data, Toast.LENGTH_SHORT).show()     } } |