我正在尝试创建AlertDialog
,但按钮未显示。仅在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();
答案 0 :(得分:34)
确实似乎需要定义AlertDialog主题。上面的另一种方法是在Application主题中定义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>
然后仅使用AlertDialog.Builder
参数创建Context
就足够了。
注意:上述内容似乎仅适用于android.app.AlertDialog.Builder
,并且不适用于AppCompat构建器(android.support.v7.app.AlertDialog.Builder
,至少从版本 25.0.1 < / em>的)。对于AppCompat构建器,我必须将主题ID作为第二个参数传递给Builder构造函数,以使按钮可见。
答案 1 :(得分:15)
因此,在Android 7.0上你必须提供一个主题。至少,这就是我必须做的事情。
<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);
答案 2 :(得分:8)
对我有用的是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);
答案 3 :(得分:5)
您可以为“提醒对话框”创建自定义主题,并在应用主题中设置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>
最后,在Application Theme中将自定义创建的主题设置为alertDialogTheme
:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!--To make the change global to application-->
<item name="alertDialogTheme">@style/AlertDialogTheme</item>
</style>
经过android.support.v7.app.AlertDialog
答案 4 :(得分:3)
我有一个类似的问题,事情是我没有使用支持库来进行AppCompatActivity,因此我改变了:
import android.app.AlertDialog;
到
import android.support.v7.app.AlertDialog;
并且有效。
答案 5 :(得分:0)
你需要使用一个主题,如:
Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder (Activity, Android.Resource.Style.ThemeMaterialDialogAlert);
答案 6 :(得分:0)
您可以为按钮添加自定义颜色。 在您的代码下方
builder.show();
写这个
Button bg = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
bg.setTextColor(Color.BLUE);
答案 7 :(得分:-1)
对不起,迟到的回答, 它关于进口问题。你需要选择v7.alertDialog,而不是使用app.alertDialog。
请将您的代码更改为v7.alertDialog,您还将在nexus中显示按钮颜色。
答案 8 :(得分:-2)
也许为时已晚,但我希望有人会使用这个解决方案。 你可以这样做:你应该将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);
}
});