У меня сейчас большая проблема в приложении.
Я использую Theme.Light во всем приложении. Результат отличный, но я заметил, что в ICS диалог имеет белый фон, а в предыдущих версиях фон был черным (см. Скриншот ниже)
Моей первой идеей было использование другого макета для элементов и использование layout-v14 с темным текстом и папки с белым текстом.
Это будет работать, но я действительно хотел бы установить тему диалога, как я делаю с классическим диалогом:
return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_TRADITIONAL)
.create();
Проблема теперь в том, что мой пользовательский диалог расширяет диалог, и у меня больше нет возможности играть со сборщиком:
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, и я полностью застрял в своем приложении.
Большое спасибо за любую помощь!
РЕДАКТИРОВАТЬ, ДОБАВИТЬ БОЛЬШЕ ИНФОРМАЦИИ
По совету Вине Шуклы я попробовал новый 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