主题不适用于 Android 上的 DialogFragment [英] Theme not applying to DialogFragment on Android

查看:26
本文介绍了主题不适用于 Android 上的 DialogFragment的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将旧 Dialogs 切换为 DialogFragment,但主题和样式似乎不起作用.

I'm switching my old Dialogs to DialogFragment, but the themes and styles don't seem to be working.

我正在使用兼容库 v4 中的 DialogFragment,并且在 onCreate 方法中我尝试调用 setStyle(style, theme);有很多不同的主题,但对话框总是在运行 Android 4.0.3 的模拟器中显示为旧"对话框(即,它不显示在 Holo 主题中).

I'm using the DialogFragment from the compatibility library v4, and in the onCreate method I've tried calling setStyle(style, theme); with a lot of different themes, but the dialog always shows as an "old" dialog in the emulator running Android 4.0.3 (i.e., it does not shows in Holo theme).

还有什么我应该做的吗?使用兼容性库是否会禁用 Holo 主题或任何东西?如果是这种情况,我是否应该创建两个 DialogFragment,一个用于旧版本,一个用于新版本?

Is there anything else that I should be doing? Does using the compatibility library disables the Holo theme or anything? If this is the case, should I create two DialogFragments, one for older versions and one for newer versions?

谢谢!

这是我的对话框的(简化的)代码.我已经尝试过 Theme_Holo_Dialog_NoActionBar 和 Theme_DeviceDefault_Dialog_NoActionBar,但 Android 4 模拟器总是将对话框显示为旧"对话框,而不是使用 Holo 主题.我究竟做错了什么?:(

Here's the (simplified) code for my dialog. I've tried both Theme_Holo_Dialog_NoActionBar and Theme_DeviceDefault_Dialog_NoActionBar, but the Android 4 emulator always shows the dialog as an "old" dialog instead of using the Holo theme. What am I doing wrong? :(

[...]
import android.support.v4.app.DialogFragment;
[...]

public class AlertDialogFragment extends DialogFragment {

  public static AlertDialogFragment newInstance(int id) {

    AlertDialogFragment f = new AlertDialogFragment();
    Bundle args = new Bundle();
    args.putInt("id", id);
    f.setArguments(args);

 }

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    int style = DialogFragment.STYLE_NORMAL, theme = 0;
    theme = android.R.style.Theme_Holo_Dialog_NoActionBar;
    setStyle(style, theme);     
  }

  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {

    mId = getArguments().getInt("id");
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
        .setTitle(mTitle)
        .setMessage(mMessage)
        .setPositiveButton(getString(R.string.btn_ok), new DialogInterface.OnClickListener() {      
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dismiss();                  
            }
        });
        return builder.create();
    }

推荐答案

我相信你需要在实际的Dialog而不是Fragment上设置主题

I believe you need to set the theme on the actual Dialog and not the Fragment

使用此构造函数创建您的 AlertDialog:

Use this constructor to create your AlertDialog:

 AlertDialog.Builder(Context context, int theme)

 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), theme)

这篇关于主题不适用于 Android 上的 DialogFragment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆