缺lessAlertDialog上的button| Android 7.0(Nexus 5x)

我正在尝试创build一个AlertDialogbutton不显示。 只有在Android 7.0中看到这个问题:

 final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("This app needs location access"); builder.setMessage("Please grant location access so this app can detect beacons."); builder.setPositiveButton(android.R.string.ok, null); builder.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override @TargetApi(Build.VERSION_CODES.M) public void onDismiss(final DialogInterface dialog) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION); } }); builder.show(); 

AlertDialog

Solutions Collecting From Web of "缺lessAlertDialog上的button| Android 7.0(Nexus 5x)"

事实上,似乎AlertDialog主题需要定义。 上面的替代方法是在应用程序主题中定义AlertDialog主题:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- ... other AppTheme items ... --> <item name="android:alertDialogTheme">@style/AlertDialogTheme</item> </style> <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> 

那么仅用Context参数就可以创buildAlertDialog.Builder

注意:以上似乎只适用于android.app.AlertDialog.Builder ,并不适用于AppCompat构build器( android.support.v7.app.AlertDialog.Builder ,至less版本25.0.1 )。 在AppCompat构build器的情况下,我必须将主题ID作为第二个parameter passing给Builder构造函数,以使button可见。

所以原来在Android 7.0上,你必须提供一个主题。 至less,这是我必须做的。

  <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless.Colored</item> </style> final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme); 

什么对我来说是在styles.xml中:

 <style name="LightDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:textColor">@android:color/primary_text_light</item> <item name="colorAccent">#007fff</item> <item name="buttonBarButtonStyle">@style/DialogButtonStyle</item> </style> 

 <style name="DialogButtonStyle" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">#007fff</item> </style> 

并在你的程序中:

 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity(), R.style.LightDialogTheme); 

您可以为“警报”对话框创build自定义主题,并在您的应用主题中设置alertDialogTheme

 <!--Alert Dialog Theme --> <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:textColor">@color/colorPrimary</item> <item name="buttonBarButtonStyle">@style/DialogButtonStyle</item> <item name="colorAccent">@color/colorAccent</item> <!--If minimum API level is greater than or equal to 23, you can define the color of Title text separately --> <item name="android:titleTextColor">@SomeColor</item> </style> <!--This is to style the buttons of alert dialog--> <style name="DialogButtonStyle" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">@color/colorAccent</item> </style> 

最后,在应用程序主题中将自定义创build的主题设置为alertDialogTheme

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!--To make the change global to application--> <item name="alertDialogTheme">@style/AlertDialogTheme</item> </style> 

testing了android.support.v7.app.AlertDialog

我有一个类似的问题,事情是,我没有使用支持库为我的AppCompatActivity,因此我改变了:

 import android.app.AlertDialog; 

 import android.support.v7.app.AlertDialog; 

它的工作。

你需要使用一个主题,像这样:

  Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(Activity,Android.Resource.Style.ThemeMaterialDialogAlert); 

您可以将自定义颜色添加到button。 在你的代码下面

 builder.show(); 

写这个

 Button bg = dialog.getButton(DialogInterface.BUTTON_POSITIVE); bg.setTextColor(Color.BLUE); 

也许它太晚了,但我希望有人会使用这个解决scheme。 你可以这样做:你应该设置onShowListenter到你的alertDialog,在这个函数里面你应该getButton()和setTextColor它。 一个例子:

 alertDialog = alertDialogBuilder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener(){ @Override public void onShow(DialogInterface dialogInterface){ alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(R.color.black); } });