私は、ユーザーが背景色を自分の好きな色に(設定を介して)変更できる主な活動をしています。私の問題は、カスタムダイアログの背景色を変更できないことです。
スタックオーバーフローのその他の答えは、次のとおりです。
(a) デフォルトのテーマを上書き 好みの色に。実行時にテーマを変更することはお勧めできませんので、この場合には適切な解決策ではないと思います。
(b) styles.xmlの変更 (実行時に変更できないため、この場合は適切ではありません)
(c) AlertBuilderクラスのオーバーライド (ただし、これによりアラートダイアログ全体が色付けされます)
色を変更することに最も近いのは、アラートビルダーのタイトルを削除し、カスタムビューの背景をお気に入りの色(ピンクなど)に設定することです。残念ながら、これによりダイアログの上部と下部にatいストリップが表示されます。
画像の後にコードが含まれています。ダイアログの背景を変更する方法についての提案は大歓迎です。
デフォルトの外観のコード
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");
}
カスタムダイアログビューの背景色を変更するためのコード(およびAlertビルダーのタイトルが削除されました)
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);
}
私はちょっと同じ問題に直面しました。そしてそれを解決する唯一の方法は、自分のバージョンのレイアウトを拡張することでした。あなたの場合、それはAlertDialogであることがわかります。私が行うことをお勧めするのは、カスタマイズされたAlertDialogである一意のクラスを作成し、このためのレイアウトを作成してから、これをインフレートすることです。
これが私を大いに助けた投稿です。 http://blog.androgames.net/10/custom-Android-dialog/
この投稿に従い、ダイアログのカスタマイズに関する問題を解決しました。
さらに疑問がある場合は、お知らせください。
ありがとう。
ワンルールソリューションを見つけました!
d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground);
通常のダイアログで動作します。しかし、AlertDialog
で機能するかどうかはわかりません。
ダイアログの背景色
dialog.getWindow().setBackgroundDrawableResource(R.color.glassblack);
本当にうまくいきました。
カスタムレイアウトを作成せずに、AlertDialog
のいくつかのプロパティを操作して複数のデザインを作成できるハックを見つけました。
あなたがしなければならないこと:
AlertDialog
が画面に表示されると、OnShowListener
が呼び出されます。したがって、dialog.setOnShowListener(this)
を追加することにより、AlertDialog
をカスタマイズできます。
コード:
// Create AlertDialog
AlertDialog.Builder adb = new AlertDialog.Builder(context1);
adb.setTitle(context1.getString(R.string.app_name))
.setMessage(message)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = adb.create();
// Make some UI changes for AlertDialog
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
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.primaryColor));
positiveButton.setTypeface(Typeface.DEFAULT_BOLD);
positiveButton.invalidate();
Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
negativeButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
negativeButton.setTypeface(Typeface.DEFAULT_BOLD);
negativeButton.invalidate();
Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL);
neutralButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
neutralButton.setTypeface(Typeface.DEFAULT_BOLD);
neutralButton.invalidate();
}
});