9

我在清单中使用了以下行:

android:theme="@android:style/Theme.Light.NoTitleBar"

没有标题栏并在我的应用程序中显示 AlertDialog 的轻型版本,例如: 在此处输入图像描述

但它仍然以深色主题显示:

在此处输入图像描述

我的对话框 Java 代码:

    new AlertDialog.Builder(FreeDraw.this)
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setTitle("Clear Drawing?")
    .setMessage("Do you want to clear the drawing board?")
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
            startActivity(getIntent());  
        }
    })
    .setNegativeButton("No", null)
    .show();

如何保持 AlertDialog 的主题光?

4

4 回答 4

28

您帖子中的顶部对话框是 Holo Light 主题对话框,而底部对话框是较旧的主题对话框。在 Honeycomb 以下的版本中,您无法获得 Holo Light 主题对话框。这是我用来根据设备运行的 android 版本选择灯光主题的小片段。

AlertDialog.Builder使用它传递的上下文的主题。您可以使用 aContextThemeWrapper来设置它。

ContextThemeWrapper themedContext;
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
    themedContext = new ContextThemeWrapper( FreeDraw.this, android.R.style.Theme_Holo_Light_Dialog_NoActionBar );
}
else {
    themedContext = new ContextThemeWrapper( FreeDraw.this, android.R.style.Theme_Light_NoTitleBar );
}
AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);
于 2013-09-04T14:32:48.380 回答
15

您可以在创建时使用这样的东西AlertDialog

AlertDialog.Builder builder = null;
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    builder = new AlertDialog.Builder(BaseActivity.this);
} else {
    builder = new AlertDialog.Builder(BaseActivity.this, AlertDialog.THEME_HOLO_LIGHT);
}
// ... do your other stuff.

此代码将在较新版本中创建 Holo Styled AlertDialog,并在具有旧版本 Android 的设备上创建基于普通设备的 AlertDialog。

于 2013-09-04T14:13:59.920 回答
3

你必须使用一个AlertDialog Builder. 有了它,您可以为对话框设置样式。看下面的例子: http: //pastebin.com/07wyX0V3

<style name="popup_theme" parent="@android:style/Theme.Light">
    <item name="android:windowBackground">@color/back_color</item>
    <item name="android:colorBackground">@color/back_color</item>
</style>
于 2013-09-04T14:09:48.433 回答
1

如果您正在使用谷歌的新材料库,并希望保持主题一致

implementation 'com.google.android.material:material:1.0.0-beta01'

只需将其用于 LightAlertBox

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),R.style.Theme_MaterialComponents_Light_Dialog_Alert);

对于黑暗AlertBox

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),R.style.Theme_MaterialComponents_Dialog_Alert);
于 2018-10-20T11:09:20.407 回答