Android Custom Layout AlertDialog Example

If you have read Android Alert Dialog Example, you must know how to create and use AlertDialog basically. This article will show you two advanced examples about how to add custom list items and custom view objects in android Alert Dialog.

1. Example Overview.

android custom layout alert dialog example

activity_alert_dialog_custom_view.xml

This is the example layout xml file. Saved in app / res / layout folder.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <Button
        android:id="@+id/alertDialogCustomAdapterButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Simple Adapter Alert Dialog" />

    <Button
        android:id="@+id/alertDialogCustomViewButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Custom View Alert Dialog" />

    <TextView
        android:id="@+id/alertDialogTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20dp"/>

</LinearLayout>

AlertDialogCustomViewActivity.java

package com.dev2qa.example;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AlertDialogCustomViewActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alert_dialog_custom_view);

        setTitle("dev2qa.com --- Custom View Alert Dialog");

        TextView textView = (TextView)findViewById(R.id.alertDialogTextView);

        this.showSimpleAdapterAlertDialog(textView);

        this.showCustomViewAlertDialog(textView);
    }

}

2. Use SimpleAdapter To Custom List Items In Alert Dialog.

android alert dialog simpleadapter

  1. Create a SimpleAdapter object.
  2. Call AlertDialog.Builder’s setAdapter() method to set the data adapter.
// Show how to use SimpleAdapter to customize list item in android alert dialog.
private void showSimpleAdapterAlertDialog(TextView textView)
{
    final TextView textViewTmp = textView;

    Button alertDialogButton = (Button)findViewById(R.id.alertDialogCustomAdapterButton);

    alertDialogButton.setOnClickListener(new View.OnClickListener() {

        // Each image in array will be displayed at each item beginning.
        private int[] imageIdArr = {R.drawable.if_candy_cane, R.drawable.if_present, R.drawable.if_snowman};
        // Each item text.
        private String[] listItemArr = {"Candy Cane", "Present", "Snow Man"};

        // Image and text item data's key.
        private final String CUSTOM_ADAPTER_IMAGE = "image";
        private final String CUSTOM_ADAPTER_TEXT = "text";

        @Override
        public void onClick(View view) {
            // Create a alert dialog builder.
            AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogCustomViewActivity.this);
            // Set icon value.
            builder.setIcon(R.mipmap.ic_launcher);
            // Set title value.
            builder.setTitle("Simple Adapter Alert Dialog");

            // Create SimpleAdapter list data.
            List<Map<String, Object>> dialogItemList = new ArrayList<Map<String, Object>>();
            int listItemLen = listItemArr.length;
            for(int i=0;i<listItemLen;i++)
            {
                Map<String, Object> itemMap = new HashMap<String, Object>();
                itemMap.put(CUSTOM_ADAPTER_IMAGE, imageIdArr[i]);
                itemMap.put(CUSTOM_ADAPTER_TEXT, listItemArr[i]);

                dialogItemList.add(itemMap);
            }

            // Create SimpleAdapter object.
            SimpleAdapter simpleAdapter = new SimpleAdapter(AlertDialogCustomViewActivity.this, dialogItemList,
                    R.layout.activity_alert_dialog_simple_adapter_row,
                    new String[]{CUSTOM_ADAPTER_IMAGE, CUSTOM_ADAPTER_TEXT},
                    new int[]{R.id.alertDialogItemImageView,R.id.alertDialogItemTextView});

            // Set the data adapter.
            builder.setAdapter(simpleAdapter, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int itemIndex) {
                    textViewTmp.setText("You choose item " + listItemArr[itemIndex]);
                }
            });

            builder.setCancelable(false);
            builder.create();
            builder.show();
        }
    });
}

activity_alert_dialog_simple_adapter_row.xml

This layout xml file is used to represent one list item. It is used by SimpleAdapter. It is saved in app / res / layout folder.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/alertDialogItemImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/alertDialogItemTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="50dp"/>

</LinearLayout>

3. Custom View In Alert Dialog.

android alert dialog custom view

  1. Define a custom view object use layout xml file.
  2. Call LayoutInflater().inflate() method to get the custom view in java code.
  3. Call AlertDialog.Builder’s setView() method to set above custom view.
READ :   How To Create New Android Studio Project

activity_alert_dialog_custom_view_login_form.xml

This is the custom view layout file. It is saved in app / res / layout folder.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableLayout
        android:id="@+id/alertDialogLoginForm"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="35dp">

        <!-- User name row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="User Name:" />
            <EditText
                android:id="@+id/loginFormUserName"
                android:lines="1"
                android:maxLines="1"
                android:maxLength="25" />
        </TableRow>

        <!-- Password row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Password:"/>
            <EditText
                android:id="@+id/loginFormPassword"
                android:password="true"
                android:lines="1"
                android:maxLines="1"
                android:maxLength="15"/>

        </TableRow>

        <!-- Phone number row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Phone Number:"/>
            <EditText
                android:id="@+id/loginFormPhoneNumber"
                android:phoneNumber="true"
                android:lines="1"
                android:maxLines="1"
                android:maxLength="18"/>
        </TableRow>

        <!-- Buttons row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <Button
                android:id="@+id/loginFormRegisterButton"
                android:text="Register"/>

            <Button
                android:id="@+id/loginFormLoginButton"
                android:text="Login"/>

            <Button
                android:id="@+id/loginFormResetButton"
                android:text="Reset"/>

        </TableRow>
    </TableLayout>

</LinearLayout>

Below is java code that implement custom view in alert dialog.

// Show how to add custom view in android alert dialog.
private void showCustomViewAlertDialog(TextView textView)
{
    final TextView textViewTmp = textView;

    Button alertDialogButton = (Button)findViewById(R.id.alertDialogCustomViewButton);

    alertDialogButton.setOnClickListener(new View.OnClickListener() {

        // Store the created AlertDialog instance.
        // Because only AlertDialog has cancel method.
        private AlertDialog alertDialog = null;

        @Override
        public void onClick(View view) {
            // Create a alert dialog builder.
            final AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogCustomViewActivity.this);
            // Set icon value.
            builder.setIcon(R.mipmap.ic_launcher);
            // Set title value.
            builder.setTitle("Custom View Alert Dialog");

            // Get custom login form view.
            final View loginFormView = getLayoutInflater().inflate(R.layout.activity_alert_dialog_custom_view_login_form, null);
            // Set above view in alert dialog.
            builder.setView(loginFormView);

            // Register button click listener.
            Button registerButton = (Button)loginFormView.findViewById(R.id.loginFormRegisterButton);
            registerButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        // Close Alert Dialog.
                        alertDialog.cancel();
                        textViewTmp.setText("Register success.");
                    }catch(Exception ex)
                    {
                        ex.printStackTrace();
                    }
                }
            });

            // Login button click listener.
            Button loginButton = (Button)loginFormView.findViewById(R.id.loginFormLoginButton);
            loginButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        // Close Alert Dialog.
                        alertDialog.cancel();
                        textViewTmp.setText("Login success.");
                    }catch(Exception ex)
                    {
                        ex.printStackTrace();
                    }
                }
            });

            // Reset button click listener.
            Button resetButton = (Button)loginFormView.findViewById(R.id.loginFormResetButton);
            resetButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        EditText loginUserName = (EditText)loginFormView.findViewById(R.id.loginFormUserName);
                        EditText loginPassword = (EditText)loginFormView.findViewById(R.id.loginFormPassword);
                        EditText loginPhoneNumber = (EditText)loginFormView.findViewById(R.id.loginFormPhoneNumber);

                        loginUserName.setText("");
                        loginPassword.setText("");
                        loginPhoneNumber.setText("");
                    }catch(Exception ex)
                    {
                        ex.printStackTrace();
                    }
                }
            });

            builder.setCancelable(true);
            alertDialog = builder.create();
            alertDialog.show();
        }
    });
}
(Visited 8,695 times, 44 visits today)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.