设置我的CustomDialog的主题,扩展Dialog实现OnClickListener的最佳做法是什么

时间:2011-12-27 07:52:12

标签: android background dialog themes

我目前在申请中遇到了一个大问题。 我在整个应用程序中使用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的主题,而且我完全陷入了应用程序。

非常感谢您的帮助!

enter image description here

编辑添加更多信息

根据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

1 个答案:

答案 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}}