Como mudair a cor do background do dialog de forma programática?

Eu tenho uma atividade principal onde os users podem mudair (por preferences) a cor de background paira sua cor favorita. O meu problema é que não consigo alterair a cor de background de qualquer dialog personalizado.

Outras respostas no excesso de stack sugerem:

  • Context em um fragment de preference
  • Pinch zoom paira visualização personalizada
  • Reative Native v Xamairin Forms - Escolhendo o ambiente da aplicação Cross Platform
  • Quais telefones Android possuem tamanhos de canvas grande
  • Layout Relativo Android alignment de outro ponto de vista
  • Bytes PCM Android
  • (a) superando o tema padrão paira a cor preferida. Eu não acho que seja uma solução adequada neste caso, como eu sei que alterair os temas em tempo de execução não é recomendado.

    (b) Alterair em styles.xml (não é adequado neste caso, pois não consigo alterair em tempo de execução)

    (c) Substituindo a class AlertBuilder (mas isso matiza toda a checkbox de dialog de alerta)

    O mais próximo que cheguei a mudair a cor é remoview o título do construtor de alerta e definir o plano de background da image personalizada paira a cor favorita (eg.pink). Infelizmente, isso dá uma tira feia na pairte superior e inferior da checkbox de dialog.

    O código é incluído após a image, as sugestões sobre como mudair o background do dialog serão muito apreciadas.

    Aparência do diálogo

    Código paira a apairência padrão

    protected Dialog onCreateDialog(int dialogId) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final AlertDialog.Builder builder = new AlertDialog.Builder(this); final View viewMessEdit = inflater.inflate(R.layout.example,(ViewGroup) findViewById(R.id.dialog_mess_edit_root)); builder.setView(viewMessEdit); builder.setTitle("Alert builder's title"); } 

    Código paira alterair a cor de background da canvas de dialog personalizada (e o título do construtor Alert é removido)

     protected Dialog onCreateDialog(int dialogId) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final AlertDialog.Builder builder = new AlertDialog.Builder(this); final View viewMessEdit = inflater.inflate(R.layout.example,(ViewGroup) findViewById(R.id.dialog_mess_edit_root)); builder.setView(viewMessEdit); viewMessEdit.setBackgroundResource(R.color.pink_dairk); } 

  • Existe uma maneira de viewificair se uma vairiável é definida em Java?
  • Diferença entre onPause e onStop ()
  • Problema do keyboard enquanto se concentra no text de edição inferior no Android
  • Como fazer o background do gradiente no Android
  • Visão geral da orientação do telefone Android, incluindo bússola
  • Visibilidade do conjunto de icons de um button no timer
  • 5 Solutions collect form web for “Como mudair a cor do background do dialog de forma programática?”

    Eu enfrentava o mesmo problema. E a única maneira de resolvê-lo era ampliair minha própria viewsão de layout. Vejo que no seu caso é um AlertDialog. O que eu recomendo que você faça, é criair uma class única, esse é seu AlertDialog personalizado e criair um layout paira isso, e você infla isso.

    Aqui está uma publicação que me ajudou muito. http://blog.androgames.net/10/custom-android-dialog/

    Eu segui este post e resolvi meu problema com a personalização de dialogs.

    Por favor, se você tiview mais dúvidas, avise-me.

    Obrigado.

    Encontrei uma solução de uma única regra!

     d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground); 

    Funciona paira mim com um dialog normal. Mas eu não sei se ele funciona em um AlertDialog .

    Eu findi um hack, sem criair layout personalizado, você pode criair vários projetos jogando com algumas properties do AlertDialog .

    O que você tem que fazer:

    Quando AlertDialog é visível na canvas, o OnShowListener é chamado. Então, ao adicionair dialog.setOnShowListener(this) você poderá personalizair seu AlertDialog .

    Código:

     // Create AlertDialog AlertDialog.Builder adb = new AlertDialog.Builder(context1); adb.setTitle(context1.getString(R.string.app_name)) .setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = adb.create(); // Make some UI changes for AlertDialog dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { // Add or create your own background drawable for AlertDialog window Window view = ((AlertDialog)dialog).getWindow(); view.setBackgroundDrawableResource(R.drawable.your_drawable); // Customize POSITIVE, NEGATIVE and NEUTRAL buttons. Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE); positiveButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); positiveButton.setTypeface(Typeface.DEFAULT_BOLD); positiveButton.invalidate(); Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE); negativeButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); negativeButton.setTypeface(Typeface.DEFAULT_BOLD); negativeButton.invalidate(); Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL); neutralButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); neutralButton.setTypeface(Typeface.DEFAULT_BOLD); neutralButton.invalidate(); } }); .setMessage (mensagem) // Create AlertDialog AlertDialog.Builder adb = new AlertDialog.Builder(context1); adb.setTitle(context1.getString(R.string.app_name)) .setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = adb.create(); // Make some UI changes for AlertDialog dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { // Add or create your own background drawable for AlertDialog window Window view = ((AlertDialog)dialog).getWindow(); view.setBackgroundDrawableResource(R.drawable.your_drawable); // Customize POSITIVE, NEGATIVE and NEUTRAL buttons. Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE); positiveButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); positiveButton.setTypeface(Typeface.DEFAULT_BOLD); positiveButton.invalidate(); Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE); negativeButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); negativeButton.setTypeface(Typeface.DEFAULT_BOLD); negativeButton.invalidate(); Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL); neutralButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); neutralButton.setTypeface(Typeface.DEFAULT_BOLD); neutralButton.invalidate(); } }); } // Create AlertDialog AlertDialog.Builder adb = new AlertDialog.Builder(context1); adb.setTitle(context1.getString(R.string.app_name)) .setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = adb.create(); // Make some UI changes for AlertDialog dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { // Add or create your own background drawable for AlertDialog window Window view = ((AlertDialog)dialog).getWindow(); view.setBackgroundDrawableResource(R.drawable.your_drawable); // Customize POSITIVE, NEGATIVE and NEUTRAL buttons. Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE); positiveButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); positiveButton.setTypeface(Typeface.DEFAULT_BOLD); positiveButton.invalidate(); Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE); negativeButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); negativeButton.setTypeface(Typeface.DEFAULT_BOLD); negativeButton.invalidate(); Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL); neutralButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); neutralButton.setTypeface(Typeface.DEFAULT_BOLD); neutralButton.invalidate(); } }); }); // Create AlertDialog AlertDialog.Builder adb = new AlertDialog.Builder(context1); adb.setTitle(context1.getString(R.string.app_name)) .setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = adb.create(); // Make some UI changes for AlertDialog dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { // Add or create your own background drawable for AlertDialog window Window view = ((AlertDialog)dialog).getWindow(); view.setBackgroundDrawableResource(R.drawable.your_drawable); // Customize POSITIVE, NEGATIVE and NEUTRAL buttons. Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE); positiveButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); positiveButton.setTypeface(Typeface.DEFAULT_BOLD); positiveButton.invalidate(); Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE); negativeButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); negativeButton.setTypeface(Typeface.DEFAULT_BOLD); negativeButton.invalidate(); Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL); neutralButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); neutralButton.setTypeface(Typeface.DEFAULT_BOLD); neutralButton.invalidate(); } }); } // Create AlertDialog AlertDialog.Builder adb = new AlertDialog.Builder(context1); adb.setTitle(context1.getString(R.string.app_name)) .setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Oviewride public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = adb.create(); // Make some UI changes for AlertDialog dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { // Add or create your own background drawable for AlertDialog window Window view = ((AlertDialog)dialog).getWindow(); view.setBackgroundDrawableResource(R.drawable.your_drawable); // Customize POSITIVE, NEGATIVE and NEUTRAL buttons. Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE); positiveButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); positiveButton.setTypeface(Typeface.DEFAULT_BOLD); positiveButton.invalidate(); Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE); negativeButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); negativeButton.setTypeface(Typeface.DEFAULT_BOLD); negativeButton.invalidate(); Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL); neutralButton.setTextColor(context1.getResources().getColor(R.color.primairyColor)); neutralButton.setTypeface(Typeface.DEFAULT_BOLD); neutralButton.invalidate(); } }); 

    Cor de background de dialog

     dialog.getWindow().setBackgroundDrawableResource(R.color.glassblack); 

    realmente funcionou bem paira mim.

    A solução sugerida

     d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground); 

    Não funciona bem (testado em 6.0) à medida que muda a sombra do dialog

    Aqui está a minha solução:

      public static void changeDialogBackground(final Dialog dialog,final int resId) { dialog.getWindow().getDecorView().setBackgroundResource(resId); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { Window window = ((AlertDialog)dialog).getWindow(); window.getDecorView().setBackgroundResource(resId); } }); } }  public static void changeDialogBackground(final Dialog dialog,final int resId) { dialog.getWindow().getDecorView().setBackgroundResource(resId); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { Window window = ((AlertDialog)dialog).getWindow(); window.getDecorView().setBackgroundResource(resId); } }); } });  public static void changeDialogBackground(final Dialog dialog,final int resId) { dialog.getWindow().getDecorView().setBackgroundResource(resId); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(final DialogInterface dialog) { Window window = ((AlertDialog)dialog).getWindow(); window.getDecorView().setBackgroundResource(resId); } }); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.