Изменение цвета фона всплывающего окна
Я написал код, который показывает всплывающее окно, но я хочу изменить цвет фона с черного на белый , и цвет писать.
Это код диалогового окна:
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, false);
if (!welcomeScreenShown) {
String whatsNewText = getResources().getString(R.string.Text);
new AlertDialog.Builder(this).setMessage(whatsNewText).setPositiveButton(
R.string.ok, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean(welcomeScreenShownPref, true);
editor.commit(); // Very important to save the preference
}
7 ответов
Если вы просто хотите светлую тему и не конкретизируете конкретный цвет, вы можете передать идентификатор темы в AlertDialog.Конструктор-конструктор.
AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)...
или
AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)...
чтобы расширить ответ @DaneWhite, вам не нужно полагаться на встроенные темы. Вы можете легко поставить свой собственный стиль:
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:background">@color/myColor</item>
</style>
а затем применить его в конструкторе Builder:
AlertDialog alertDialog = new AlertDialog.Builder(getContext(), R.style.MyDialogTheme)
...
.create();
это должно работать, если вы используете android.support.v7.app.AlertDialog
или android.app.AlertDialog
Это также работает лучше, чем ответ @DummyData, потому что вы не изменяете размер диалога. Если вы установите фоновый рисунок окна, вы перезапишете некоторую существующую размерную информацию и получите диалог, который не является стандартной шириной.
если вы установите фон на тему и установите тему в диалоговом окне, вы получите диалоговое окно, окрашенное так, как вы хотите, но все же правильную ширину.
заслуга сушил
создайте свой AlertDialog как обычно:
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
Dialog dialog = dialog.create();
dialog.show();
после вызов show () в диалоговом окне установите цвет фона следующим образом:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.background_dark);
для любого диалога под названием myDialog
, после вызова myDialog.show();
вы можете по телефонам:
myDialog.getWindow().getDecorView().getBackground().setColorFilter(new LightingColorFilter(0xFF000000, CUSTOM_COLOR));
здесь CUSTOM_COLOR
в 8-значном шестнадцатеричном формате, ex. 0xFF303030
. Вот,FF
- это альфа-значение, а остальное-значение цвета в hex.
можно создать пользовательский alertDialog и использовать XML-макет. в макете можно задать цвет фона и цвет текста.
что-то вроде этого:
Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
LayoutInflater inflater = (LayoutInflater)ActivityName.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_layout,(ViewGroup)findViewById(R.id.layout_root));
dialog.setContentView(view);
использовать setInverseBackgroundForced(true)
в диалоговом окне Alert builder для инвертирования фона.
обновите только импорт.
import android.app.AlertDialog;
to
import android.support.v7.app.AlertDialog;
это будет исправлено.