Material Dialogsの2.0系をJavaで使うサンプルプログラム書いてみた

2019/05/20

TL;DR

fuka/material_dialogs_sample_java というプロジェクトを作ってみました。 afollestad/material-dialogs をKotlinじゃなくてJavaから呼び出したサンプルをまとめたものです。

本文

AndroidにおけるDialogライブラリの定番と言えば afollestad/material-dialogs です。

このライブラリ、ver2.0.0で一気にKotlinにシフトしました。今後はKotlinにフォーカスすること、機能追加の判断をより独断的にすることを明言しています。

2.0.0-alpha01のリリースノートから抜粋。

This library will be more opinionated. Not every feature request will be implemented.

This library is now designed specifically to work with Kotlin - it technically will work with Java, but not pleasantly.

実際、「Javaで〇〇するにはどうしたらいい?」というissueは「いいからKotlin使えよ(意訳)」という回答とともに片っ端からcloseされたりチケット自体が消されたりしています。closeはいいけど消さないでおくれ……。closeされてないで残ってるのは#1591くらいのようです。

まあ、作者の主張は分かるのですが、Kotlinに乗り換えられないプロジェクトや現場もあるんですよね。

なので、Javaで使い続ける方法を試してみました。作者の意向がどうであれ、KotlinとJavaは相互利用できるので2.0系をJavaから呼び出せるはずなのです……。

ま、公式サイトにkotlin版の使い方は載っているので、それをJavaに置き換えるだけなんですけどね。例えばシンプルなダイアログは以下のような感じになります。

MaterialDialog dialog = new MaterialDialog(this);
dialog.title(null, "Basic dialog");
dialog.message(null, "Dialog message.", false, 1);
dialog.positiveButton(null, "OK", materialDialog -> {
  Toast.makeText(MainActivity.this, "onPositive", Toast.LENGTH_SHORT).show();
  return null;
});
dialog.negativeButton(null, "Cancel", null);
dialog.show();

引数がやたらに多くなる上、使わないところにはnullを突っ込むことになるのでイマイチ感はありますが問題なく使えます。

ほかにも代表的なダイアログは一通り試してみたので、その結果をもとに使い方をまとめたサンプルプロジェクトを作ってGitHubに上げておきました。

「material-dialogsは使いたいけどKotlin移行は無理だし、かと言って古いバージョンだとAndroidXに対応してないし……」という境遇の方は参考にしてみてください。

自分が趣味で作ってるアプリは少なくともこの路線。すでにいくつかのアプリに適用して無事動いてます。割と安定稼働モードのアプリが多いんで、Kotlin移行のモチベーションが湧かないんですよね。




関連(するかもしれない)記事


おススメ