私のAndroidアプリケーションでは、ボタンをクリックするとアラートダイアログが表示されます。アラートのカスタムフォントを設定したい。Webを検索して、このテーマに関するチュートリアルと質問をいくつか見つけましたが、どれもうまくいきません。
フォントを変更するにはどうすればよいですか?
ありがとう
私のAndroidアプリケーションでは、ボタンをクリックするとアラートダイアログが表示されます。アラートのカスタムフォントを設定したい。Webを検索して、このテーマに関するチュートリアルと質問をいくつか見つけましたが、どれもうまくいきません。
フォントを変更するにはどうすればよいですか?
ありがとう
これを行うには、アラート ビルダーを使用してアラートを作成します。次に、このアラートから TextView を取得し、アラートの書体を設定します。
AlertDialog dialog = new AlertDialog.Builder(this).setMessage("Hello world").show();
TextView textView = (TextView) dialog.findViewById(android.R.id.message);
Typeface face=Typeface.createFromAsset(getAssets(),"fonts/FONT");
textView.setTypeface(face);
表示するダイアログの独自のレイアウトを定義できます。
ここにこれへのリンクがあります
レイアウトでは、必要な typeFace で TextViews を定義できます。必要なフォントの otf ファイルをダウンロードする必要があります。それらをアセット ディレクトリに配置します。それを TextView の TypeFace として設定します。TypeFaceの設定方法
これは役に立ちます
アイテムのリストを含む警告ダイアログがあったため、いくつかの回答を組み合わせて、少し単純化する必要がありました。警告ダイアログ自体のコードは次のとおりです。
val dialog = AlertDialog.Builder(this, R.style.MyAlertDialogTheme).setTitle(R.string.sort_by)
.setSingleChoiceItems(modelList, selectedSortPosition) { _, position -> selectedSortPosition = position }
.setPositiveButton(R.string.ok) { _, _ -> }
.setNegativeButton(R.string.cancel) { _, _ -> }.create()
dialog.show()
setFontsForDialog(dialog)
ここでは、Danilo の回答のスタイルを使用しましたが、そのために設定されたテーマの色を追加しました。
<style name="MyAlertDialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textAppearanceSmall">@style/MyTextAppearanceSmall</item>
<item name="android:textAppearanceMedium">@style/MyTextAppearanceMedium</item>
<item name="android:textAppearanceLarge">@style/MyTextAppearanceLarge</item>
</style>
リスト項目のフォントのみを変更するため、このメソッドを追加しました。アプリで何度も使用する予定だったので、アクティビティ自体の拡張メソッドを作成しました。
private fun Activity.setFontsForDialog(dialog: AlertDialog) {
val font = ResourcesCompat.getFont(this, R.font.theme_bold_pn)
dialog.findViewById<TextView>(android.R.id.message)?.typeface = font
dialog.findViewById<TextView>(android.R.id.button1)?.typeface = font
dialog.findViewById<TextView>(android.R.id.button2)?.typeface = font
}