16

私のFragmentsは、アプリケーションの他の部分と一貫して見えるようにしたいので、タイトルの色だけでなく、ポジティブ/ネガティブボタンの色も変更したいと思います。 enter image description hereLollipopのDialogFragmentボタンの色が変更されました

私はこのようにこれを実行しようとしたが、unfortunetalyそれは動作しません:

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ファイルを通してアプリケーション全体でそれを行う可能性がありますか?

答えて

25

次は私のために働い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); 
    } 
} 
+0

素晴らしいです!あなたは多くの時間を節約しました。 – fragon

8

編集することができアラートダイアログに表示されるボタンやチェックボックスの色を変更するには:

値 - どの意志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

+0

プリロリポップAPIはどうですか? –

0

値-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> 

、あなたはいけない上記android:接頭辞を使用

関連する問題