我目前在申请中遇到了一个大问题。 我在整个应用程序中使用Theme.Light。结果很棒,但我注意到在ICS中,Dialog有白色背景,在以前的版本中,背景是黑色的(见下面的截图)
我的第一个想法是为项目使用不同的布局,并使用带有深色文本的layout-v14和带有白色文本的布局文件夹。
这将有效,但我真的想像对待经典对话一样设置对话框的主题:
return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_TRADITIONAL)
.create();
现在的问题是我的自定义Dialog扩展了Dialog,我不再有可能与构建器一起玩:
public class MyCustomDialog extends Dialog implements OnClickListener {
int THEME=AlertDialog.THEME_TRADITIONAL;
public MyCustomDialog(Activity plannerActivity) {
super(plannerActivity);
View myView=//Something;
setContentView(myView);
}
}
在我的主要代码中:
new MyCustomDialog(getActivity()).show();
由于我无法访问构建器,因此无法更改CustomDialog的主题,而且我完全陷入了应用程序。
非常感谢您的帮助!
编辑添加更多信息
根据Vineet Shukla的建议,我尝试了新的DialogYour(Activity.this,android.R.style.Theme_Translucent_NoTitleBar),但构造函数DialogYour(Activity,int)未定义。
我不能用主题覆盖DialogYour,因为有些东西是android内部的!
当我查看对话代码时:
Dialog(Context context, int theme, boolean createContextWrapper) {
if (theme == 0) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(com.android.internal.R.attr.dialogTheme,
outValue, true);
theme = outValue.resourceId;
}
mContext = createContextWrapper ? new ContextThemeWrapper(context, theme) : context;
mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Window w = PolicyManager.makeNewWindow(mContext);
mWindow = w;
w.setCallback(this);
w.setWindowManager(mWindowManager, null, null);
w.setGravity(Gravity.CENTER);
mUiThread = Thread.currentThread();
mListenersHandler = new ListenersHandler(this);
}
我无法覆盖,因为PolicyManager属于com.android.internal
答案 0 :(得分:2)
我尝试了custom dialog
,但不是这样。我overridden
onCreateDialog
中的activity
android.R.style.Theme_Translucent_NoTitleBar
,主题为protected Dialog onCreateDialog(int id) {
Dialog dialog = new DialogYour(Activity.this, android.R.style.Theme_Translucent_NoTitleBar);
if(id == YOUR_ID){
dialog.setContentView(R.layout.layout);
//initialize your views here ...
}
return dialog;
}
android.R.style.Theme_Translucent_NoTitleBar
您可以尝试这种方式,您将获得所需的自定义布局布局。
注意:您还可以尝试在代码中使用主题ConnectionDialog dialog = new ConnectionDialog(getActivity());
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Theme_Translucent_NoTitleBar;
dialog.show();
。
<强> EDIT1:强>
我没试过,但要在你的情况下设置主题,你可以尝试这样:
constructor
编辑2:我已对您的代码进行了测试,问题出在您的public class MyCustomDialog extends Dialog implements OnClickListener {
int THEME=AlertDialog.THEME_TRADITIONAL;
public MyCustomDialog(Context context, int theme) {
super(context, theme);
View myView=//Something;
setContentView(myView);
}
}
。
MyCustomDialog dialog = new MyCustomDialog (this, android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
现在调用上面的对话框:
{{1}}