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();
実際、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
パラメーターを使用してAlertDialog.Builder
のみを作成すれば十分です。
注:上記はAndroid.app.AlertDialog.Builder
でのみ動作するようで、AppCompatビルダーでは動作しません(Android.support.v7.app.AlertDialog.Builder
、少なくともバージョン25.0以降) .1)。 AppCompat Builderの場合、テーマIDを2番目のパラメーターとしてBuilderコンストラクターに渡してボタンを表示する必要がありました。
だから、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);
私のために働いたのは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);
Alert Dialogのカスタムテーマを作成し、アプリテーマに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>
最後に、アプリケーションテーマでカスタム作成テーマを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
についてテスト済み
同様の問題がありましたが、AppCompatActivityのサポートライブラリを使用していなかったため、変更しました。
import Android.app.AlertDialog;
に
import Android.support.v7.app.AlertDialog;
そしてそれは働いた。
ボタンにカスタム色を追加できます。あなたのコードの下
builder.show();
これを書く
Button bg = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
bg.setTextColor(Color.BLUE);
次のようなテーマを使用する必要があります。
Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(アクティビティ、Android.Resource.Style.ThemeMaterialDialogAlert);