Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
183 views
in Technique[技术] by (71.8m points)

android - How to change dialog background color programmatically?

I have a main activity where users can change (via preferences) the background colour to their favourite colour. My problem is that I can not change the background colour of of any custom dialogs.

Other answers in stack overflow suggest:

(a) overiding the default theme to the preferred colour. I don't think is a suitable solution in this case as I know changing themes at run time is not recommended.

(b) Changing in styles.xml (not suitable in this case as I can't change at run time)

(c) Overriding the AlertBuilder class (but this tints the whole alert dialog)

This closest I have come to changing the colour is removing the alert builder title, and setting the custom view's background to the favourite colour (eg.pink). Unfortunately this gives an ugly strip at the top and bottom of the dialog.

Code is included after image, suggestions about how to change dialog background would be greatly appreciated.

Dialog appearance

Code for the default appearance

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");
}

Code for changing the custom dialog views background colour (and the Alert builder's title is removed)

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_dark);

}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I found a one rule solution!

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

It works for me with a normal dialog. But I dont know if it works on an AlertDialog.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...