Я задавался вопросом, мог ли кто-то выручить меня. Я пытаюсь создать пользовательский AlertDialog. Чтобы сделать это, я добавил следующую строку кода в styles.xml
<resources>
<style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
<item name="android:windowBackground">@drawable/color_panel_background</item>
</style>
</resources>
Следующее является основным видом деятельности.
package com.customdialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
public class CustomDialog extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setTheme(R.style.CustomAlertDialog);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("HELLO!");
builder .setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//dialog.cancel();
}
});
AlertDialog alertdialog = builder.create();
alertdialog.show();
}
}
Для применения темы к AlertDialog я должен был установить тему на текущий контекст.
Однако я просто, может казаться, не заставляю приложение показывать настроенный AlertDialog. Кто-либо может выручить меня с этим?
Думаю, это невозможно. По крайней мере, со Строителем. Я работаю с 1.6, и реализация в Builder.create ():
public AlertDialog create() {
final AlertDialog dialog = new AlertDialog(P.mContext);
P.apply(dialog.mAlert);
[...]
}
, которая вызывает конструктор AlertDialog, не связанный с темой, который выглядит следующим образом:
protected AlertDialog(Context context) {
this(context, com.android.internal.R.style.Theme_Dialog_Alert);
}
В AlertDialog есть второй конструктор для изменение тем:
protected AlertDialog(Context context, int theme) {
super(context, theme);
[...]
}
, которые Строитель просто не вызывает.
Если Dialog в любом случае довольно общий, я бы попытался написать подкласс AlertDialog, вызвав второй конструктор и использовать этот класс вместо механизма Builder.