The dialog box is basically a pop-up window that appears on top of a layout. For instance, when we are about to delete a record, on the safer side, we shall add a confirmation popup to confirm our action. We can customize this dialog box with our custom text, images, or say widgets. Here we shall see, how to add a widget to our Custom Dialog Box.
Here is a live demo of the expected output.
Let us start a new project.
In the activity_main.xml page, place a Button which when clicked will show the custom dialog box.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <Button android:id="@+id/btn_show_dialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Custom Dialog Box" android:gravity="center" android:layout_marginTop="208dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> </RelativeLayout>
Now let's create a new activity dialog_activity.xml for the custom dialog box.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="350dp" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="How do you Rate this app" android:textSize="20dp" /> </RelativeLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <RatingBar android:id="@+id/rate_app" android:layout_width="290dp" android:layout_height="50dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> </RelativeLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btn_submit_rating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="20dp" android:text="Rate" /> <Button android:id="@+id/btn_remind_later" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="70dp" android:layout_marginTop="20dp" android:text="Remind me later" /> </LinearLayout> </LinearLayout> </LinearLayout>
Next, open the MainActivity java class. Inside the DialogBox, we will be placing a RatingBar and two Buttons. One Button is to show Toast message on how much rating is given and the other Button is to dismiss the Custom DialogBox
import android.widget.Button; import android.widget.RatingBar; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; public class MainActivity extends Activity { Button btnClick, btnClose, btnRate; RatingBar rBar; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnClick = (Button) findViewById(R.id.btn_show_dialog); btnClick.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // add listener to button final Dialog dialog = new Dialog(MainActivity.this); // Create custom dialog object dialog.setContentView(R.layout.dialog_activity); // Include dialog.xml file dialog.show(); // Set dialog title dialog.setTitle("Custom Dialog"); rBar = dialog.findViewById(R.id.rate_app); btnRate = (Button) dialog.findViewById(R.id.btn_submit_rating); //Performing action on Button Click btnRate.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //Getting the rating and displaying it in the toast String rating = String.valueOf(rBar.getRating()); Toast.makeText(getApplicationContext(), "You have rated : " + rating, Toast.LENGTH_SHORT).show(); } }); btnClose = (Button) dialog.findViewById(R.id.btn_remind_later); // if the button is clicked, close the custom dialog box btnClose.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Close dialog dialog.dismiss(); } }); } }); } }
That's all. Run the project & we should get the output, as in the demo.