기본 안드로이드 AlertDialog
에서 appCompat-22.1에 포함 된 새로운 안드로이드로 마이그레이션하려고합니다. 지금까지 android.support.v7.app.AlertDialog
패키지를 사용하기 위해서는 가져 오기 만하면 됩니다.
그러나 어떻게 스타일을 지정할 수 있습니까? 예를 들어 양수 / 음수 버튼 색상, 제목 색상, 메시지 색상 및 배경 색상을 변경 하시겠습니까?
답변
를 만들 때 AlertDialog
사용할 테마를 설정할 수 있습니다.
예-대화 상자 작성
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
styles.xml-사용자 정의 스타일
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="android:background">#4CAF50</item>
</style>
결과
편집하다
제목의 모양을 변경하려면 다음을 수행하십시오. 먼저 새 스타일을 추가하십시오.
<style name="MyTitleTextStyle">
<item name="android:textColor">#FFEB3B</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>
나중에 단순히이 스타일을 참조하십시오 MyAlertDialogStyle
:
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
...
<item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>
이런 방식으로 스타일을 통해 textColor
메시지 android:textColorPrimary
와 제목을 다르게 정의 할 수 있습니다 .
답변
모든 응용 프로그램에 테마를 사용하고 두 번째 매개 변수를 사용하여 대화 상자의 스타일을 지정하지 마십시오
<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
<item name="alertDialogTheme">@style/dialog</item>
<item name="colorAccent">@color/accent</item>
</style>
<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/accent</item>
</style>
테마에서 색상 악센트를 사용하는 내 응용 프로그램에서 테마 colorAccent와 함께 alertDialog의 단추를 표시하지 않습니다. 테마에 대화 상자 스타일을 추가해야합니다.
답변
새로운 android.support.v7.app.AlertDialog를 사용하고 버튼의 색상이 다르고 사용자 정의 레이아웃이 필요한 경우 https://gist.github.com/JoachimR/6bfbc175d5c8116d411e를 확인하십시오.
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.custom_layout, null);
initDialogUi(v);
final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
.setTitle(getString(R.string.some_dialog_title))
.setCancelable(true)
.setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
doSomething();
dismiss();
}
})
.setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
})
.setView(v)
.create();
// change color of positive button
d.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
b.setTextColor(getResources().getColor(R.color.colorPrimary));
}
});
return d;
}
답변
@ reVerse 답변을 따르십시오.하지만 제 경우에는 이미 AppTheme
비슷한 속성이 있습니다.
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:textColor">#111</item>
<item name="android:textSize">13sp</item>
</style>
나는 그것을 해결했다.
1)에서 가져 오기 android.app.AlertDialog
를
android.support.v7.app.AlertDialog
2로 변경하십시오 .2 AppTheme
값을 null 값으로 대체 합니다.
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="android:background">#4CAF50</item>
<item name="android:textColor">@null</item>
<item name="android:textSize">@null</item>
</style>
.
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);
다른 사람들을 돕기를 바랍니다.
답변
나와 같은 경우 AppCompat에서 일부 색상을 수정하고 싶습니다. 대화 상자에서 고유하게 변경 해야하는 유일한 색상은 배경입니다. 그런 다음에 색상을 설정하기 만하면됩니다 colorBackgroundFloating
.
중첩 된 테마없이 일부 색상을 간단히 수정하는 기본 테마는 다음과 같습니다.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/theme_colorPrimary</item>
<item name="colorPrimaryDark">@color/theme_colorPrimaryDark</item>
<item name="colorAccent">@color/theme_colorAccent</item>
<item name="colorControlActivated">@color/theme_colorControlActivated</item>
<item name="android:windowBackground">@color/theme_bg</item>
<item name="colorBackgroundFloating">@color/theme_dialog_bg</item><!-- Dialog background color -->
<item name="colorButtonNormal">@color/theme_colorPrimary</item>
<item name="colorControlHighlight">@color/theme_colorAccent</item>
</style>
답변
<item name="editTextColor">@color/white</item>
<item name="android:textColor">@color/white</item>
<item name="android:textColorHint">@color/gray</item>
<item name="android:textColorPrimary">@color/gray</item>
<item name="colorControlNormal">@color/gray</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">#30FFFFFF</item>