appCompat 22.1 이상에서 새로운 AlertDialog를 사용하고 스타일을 지정하는 방법 오기 만하면 됩니다. 그러나 어떻게 스타일을

기본 안드로이드 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>


답변