Android AlertDialog对话框主题不一致错误

时间:2019-02-14 04:52:35

标签: android themes alertdialog

我有一个警报对话框,当您单击我的应用程序中的按钮时,该对话框会弹出。该代码非常简单,可以在下面看到:

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,  ... );

请参阅下面的图片。很好。

enter image description here

但是,奇怪的是,有时当我在模拟器上构建应用程序时,警报对话框的主题会改变,看起来像这样:

enter image description here

我无法想象是什么导致看似不可预测的随机变化。

我尝试使用此行手动设置主题,但似乎没有效果。

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

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

我很困惑,正在寻找一种手动设置主题或确保它不会更改默认主题的方法。

我无法完全确定我的应用程序的其余部分是否也经历了相同的主题更改,因为大多数内容都已被自定义代码覆盖,但是我不相信它会更改。任何想法都将受到欢迎。

注意:这个备用主题看起来像是一个较旧的主题,因此可能存在一些版本问题?

2 个答案:

答案 0 :(得分:2)

尝试此代码... 步骤1:创建警报对话框的布局文件(此布局是您设计的alertDialog) 步骤2:并使用此代码

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();
}

答案 1 :(得分:0)

与Dinesh Sarma的答案一起,可以在这里看到我现在实现的用于创建alertdialog活动的代码。

它将创建如下所示的布局:

enter image description here

在名为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>