JFreeman
JFreeman

Reputation: 1004

android alertdialog theme inconsistency error

I have an alert dialog which popups when you click a button in my app. The code is pretty simple and can be seen below:

final String[] options = {"Bar Graph", "Pie Chart", "Text Summary"};

AlertDialog.Builder builder = new AlertDialog.Builder(myActivity.this);
builder.setTitle("Choose a summary");
builder.setIcon(R.drawable.summaryicon);
builder.setItems(options,  ... );

See below an image of what it looks like. This is good.

enter image description here

However, strangely sometimes when I build my app on the emulator the theme of the alert dialog changes and looks like this instead:

enter image description here

I cannot imagine what would be causing this random change in a seemingly unpredictable way.

I have tried using this line to set the theme manually, but it seems to have no effect.

ContextThemeWrapper themedContext = new ContextThemeWrapper( AnalysisActivity.this, android.R.style.ThemeOverlay_Material_Dialog_Alert );

AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);
...

I am confused and looking for a way to set the theme manually or ensure it doesn't change from the default.

I can't entirely tell if the rest of my app also experiences the same theme change because most has all been overridden by custom code, but I don't believe it is changing. Any ideas would be welcome.

Note: this alternate theme looks like an older theme so perhaps there is some version issue?

Upvotes: 0

Views: 293

Answers (2)

JFreeman
JFreeman

Reputation: 1004

Along with Dinesh Sarma's answer the code I have now implemented to create the alertdialog activity can be seen here.

It creates a layout that looks like this:

enter image description here

Use this layout code in a file called alert_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/background_light"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/background_light"
        android:orientation="horizontal"
        android:weightSum="12">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginStart="10dp"
            android:layout_marginLeft="10dp"
            android:layout_weight="7"
            android:contentDescription="Icon"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:scaleType="fitCenter"
            app:srcCompat="@drawable/summaryicon" />

        <TextView
            android:id="@+id/textView13"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="5"
            android:gravity="center_vertical"
            android:text="Choose a Summary"
            android:textSize="18sp"
            android:textStyle="normal" />
    </LinearLayout>

    <Button
        android:id="@+id/bar_graph"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@android:color/background_light"
        android:gravity="center_vertical"
        android:paddingStart="20dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:text="Pie Chart"
        android:textAllCaps="false"
        android:typeface="sans" />

    <Button
        android:id="@+id/pie_chart"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@android:color/background_light"
        android:gravity="center_vertical"
        android:paddingStart="20dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:text="Bar Graph"
        android:textAllCaps="false"
        android:typeface="sans" />

    <Button
        android:id="@+id/text_summary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@android:color/background_light"
        android:gravity="center_vertical"
        android:paddingStart="20dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:text="Text Summary"
        android:textAllCaps="false"
        android:typeface="sans" />
</LinearLayout>

Upvotes: 0

Dinesh Sarma
Dinesh Sarma

Reputation: 521

try this code... step-1: create layout file of your alert dialog(this layout is your designed alertDialog) step-2: and use this code

public void displayAlertDialog() {
    LayoutInflater factory = LayoutInflater.from(this);
    final View alertDialogView = factory.inflate(R.layout.alert_dialog, null);
    final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setView(alertDialogView);

    alertDialogView.findViewById(R.id.bar_graph).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //your business logic
            alertDialog.dismiss();
        }
    });
    alertDialogView.findViewById(R.id.pie_chart).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //your business logic
            alertDialog.dismiss();
        }
    });
    alertDialogView.findViewById(R.id.text_summary).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //your business logic
            alertDialog.dismiss();
        }
    });

    alertDialog.show();
}

Upvotes: 2

Related Questions