web-dev-qa-db-ja.com

LollipopのDialogFragmentボタンの色が変わります

フラグメントを、適用したアプリとカラーパレットの残りの部分と一致させたいので、タイトルだけでなく、ポジティブ/ネガティブボタンの色も変更したいと思います。 enter image description here

私はこれをこのようにしようとしましたが、残念ながらそれは機能しません:

public void onStart() {
        super.onStart();
        Dialog d = getDialog();
        int dividerId = d.getContext().getResources().getIdentifier("Android:id/titleDivider", null, null);
        View divider = d.findViewById(dividerId);

        if(currentapiVersion< Build.VERSION_CODES.Lollipop) {
            divider.setBackgroundColor(getResources().getColor(R.color.accent));
            LinearLayout ll = (LinearLayout) d.findViewById(R.id.dialog_background);
            ll.setBackgroundResource(R.drawable.backrepeat_reversed);
        }
        if(currentapiVersion == Build.VERSION_CODES.Lollipop) {
            int buttonsId = d.getContext().getResources().getIdentifier("Android:id/negativeButton", null, null);
            Button b = (Button) d.findViewById(buttonsId);
            b.setTextColor(getResources().getColor(R.color.accent));
        }
        int textViewId = d.getContext().getResources().getIdentifier("Android:id/alertTitle", null, null);
        TextView tv = (TextView) d.findViewById(textViewId);

        tv.setTextColor(getResources().getColor(R.color.accent));
    }

これらのボタンの色を変更するにはどうすればよいですか?たぶん、styles.xmlファイルを介してアプリケーション全体でそれを行うことは可能ですか?

18
fragon

AlertDialogを使用してダイアログを作成できる場合は、次のことがうまくいきました。

public class DialogTest extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity()).setTitle("Test")
                .setMessage("This is a dialog.")
                .setPositiveButton(Android.R.string.yes, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                })
                .setNegativeButton(Android.R.string.no, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                }).show();
    }

    @Override
    public void onStart() {
        super.onStart();
        ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.RED);
        ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.RED);
    }
}
36
Jared Rummler

アラートダイアログに表示されるボタンとチェックボックスの色を変更するには、以下を編集できます。

値-21/styles.xml

<style name="AppTheme" parent="...">
  ...
  <item name="Android:timePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="Android:datePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="Android:alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="AlertDialogCustom" parent="Android:Theme.Material.Light.Dialog.Alert">
  <item name="Android:colorPrimary">#00397F</item>
  <item name="Android:colorAccent">#0AAEEF</item>
</style>

これにより、ダイアログのボタンのテキストとチェックボックスの色が選択されます。

DialogDate picker

9
peceps

値-21/styles.xml

<style name="AppTheme" parent="...">
  ...
  <item name="alertDialogTheme">@style/AlertDialogCustom</item>
</style>


<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">@color/buttons_color</item>
</style>

Lollipop以降では、Android:プレフィックスを使用しないでください

1