How to implement a custom AlertDialog View How to implement a custom AlertDialog View android android

How to implement a custom AlertDialog View


You can create your view directly from the Layout Inflater, you only need to use the name of your layout XML file and the ID of the layout in file.

Your XML file should have an ID like this:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:id="@+id/dialog_layout_root"              android:orientation="vertical"              android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:padding="10dp"              />

And then you can set your layout on the builder with the following code:

LayoutInflater inflater = getLayoutInflater();View dialoglayout = inflater.inflate(R.layout.dialog_layout, null);AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setView(dialoglayout);builder.show();


You are correct, it's because you didn't manually inflate it. It appears that you're trying to "extract" the "body" id from your Activity's layout, and that won't work.

You probably want something like this:

LayoutInflater inflater = getLayoutInflater();FrameLayout f1 = (FrameLayout)alert.findViewById(android.R.id.body);f1.addView(inflater.inflate(R.layout.dialog_view, f1, false));


android.R.id.custom was returning null for me. I managed to get this to work in case anybody comes across the same issue,

AlertDialog.Builder builder = new AlertDialog.Builder(context)            .setTitle("My title")            .setMessage("Enter password");final FrameLayout frameView = new FrameLayout(context);builder.setView(frameView);final AlertDialog alertDialog = builder.create();LayoutInflater inflater = alertDialog.getLayoutInflater();View dialoglayout = inflater.inflate(R.layout.simple_password, frameView);alertDialog.show();

For reference, R.layout.simple_password is :

<?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"><EditText        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:id="@+id/password_edit_view"        android:inputType="textPassword"/><CheckBox        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/show_password"        android:id="@+id/show_password_checkbox"        android:layout_gravity="left|center_vertical"        android:checked="false"/></LinearLayout>