【发布时间】:2012-05-22 09:40:35
【问题描述】:
我正在将旧 Dialogs 切换为 DialogFragment,但主题和样式似乎不起作用。
我正在使用兼容库 v4 中的 DialogFragment,并且在 onCreate 方法中我尝试调用 setStyle(style, theme);有很多不同的主题,但对话框总是在运行 Android 4.0.3 的模拟器中显示为“旧”对话框(即,它不会在 Holo 主题中显示)。
还有什么我应该做的吗?使用兼容性库是否会禁用 Holo 主题或任何东西?如果是这种情况,我是否应该创建两个 DialogFragment,一个用于旧版本,一个用于新版本?
谢谢!
这是我的对话框的(简化的)代码。我已经尝试过 Theme_Holo_Dialog_NoActionBar 和 Theme_DeviceDefault_Dialog_NoActionBar,但 Android 4 模拟器总是将对话框显示为“旧”对话框,而不是使用 Holo 主题。我究竟做错了什么? :(
[...]
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();
}
【问题讨论】:
-
你继承了什么风格,给我们看看styles.xml还有你的targetSdk是什么?它需要超过 11
-
我的目标是 SDK 14,我什至没有使用 styles.xml 文件,我只是在调用 setStyle(style, theme);在 DialogFragment 的 onCreate 方法中尝试多种样式和主题组合。例如,在我的“旧”对话框中,我使用了 android.R.style.Theme_DeviceDefault_Dialog_NoActionBar,它在 ICS 模拟器中显示为 Holo,但现在使用相同的主题却没有。
-
尝试隐式使用 Holo:
android.R.style.Theme_Holo_Dialog -
谢谢,我也试过了...没用:(
-
你必须编辑你的帖子,放一个你尝试过的代码示例,这样你更有可能得到一些答案
标签: android dialog styles themes compatibility