あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 表題 --> <PreferenceCategory app:title="表題"> <ListPreference app:key="TitleType" app:title="表題の種類" app:entries="@array/title_type_names" app:entryValues="@array/title_type_values" android:defaultValue="0" /> <CheckBoxPreference app:key="PubFirst" app:title="先頭が発行者" android:defaultValue="false" /> <CheckBoxPreference app:key="UseFileName" app:title="ファイル名優先" android:defaultValue="false" /> </PreferenceCategory> <!-- 表紙 --> <PreferenceCategory app:title="表紙"> <EditTextPreference app:key="MaxCoverLine" app:title="最大行数" app:dialogTitle="画像注記の取得最大行数" android:defaultValue="10" android:inputType="number" /> <ListPreference app:key="Cover" app:title="表紙設定" app:entries="@array/cover_options" app:entryValues="@array/cover_options_values" android:defaultValue="0" /> <CheckBoxPreference app:key="CoverHistory" app:title="表紙履歴利用" android:defaultValue="true" app:summary="前回の表紙を利用。履歴は再起動で初期化されます。" /> </PreferenceCategory> <!-- ページ出力 --> <PreferenceCategory app:title="ページ出力"> <CheckBoxPreference app:key="CoverPage" app:title="表紙画像を出力" android:defaultValue="true" /> <CheckBoxPreference app:key="TitlePageWrite" app:title="表題ページを出力" android:defaultValue="true" /> <ListPreference app:key="TitlePage" app:title="表題ページスタイル" app:entries="@array/title_page_styles" app:entryValues="@array/title_page_styles_values" android:defaultValue="middle" /> <CheckBoxPreference app:key="TocPage" app:title="目次ページを出力" android:defaultValue="true" /> <ListPreference app:key="TocVertical" app:title="目次スタイル" app:entries="@array/toc_styles" app:entryValues="@array/toc_styles_values" android:defaultValue="vertical" /> </PreferenceCategory> <!-- 出力ファイル設定 --> <PreferenceCategory app:title="出力ファイル設定"> <ListPreference app:key="Ext" app:title="拡張子" app:summary="出力するファイルの拡張子" app:entries="@array/file_extension_entries" app:entryValues="@array/file_extension_values" android:defaultValue=".epub" /> <SwitchPreferenceCompat app:key="AutoFileName" app:title="出力ファイル名に表題利用" android:defaultValue="true" /> <SwitchPreferenceCompat app:key="OverWrite" app:title="出力ファイル上書き" android:defaultValue="true" /> </PreferenceCategory>
ChatGPT:
このPreferenceScreenに対応するよう、SharedPreferences から各設定値を取得する Java コード(Android 用)を以下に示します。PreferenceFragmentCompatを使用した設定画面と連携する想定です。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // 表題カテゴリ String titleType = prefs.getString("TitleType", "0"); boolean pubFirst = prefs.getBoolean("PubFirst", false); boolean useFileName = prefs.getBoolean("UseFileName", false); // 表紙カテゴリ String maxCoverLine = prefs.getString("MaxCoverLine", "10"); String cover = prefs.getString("Cover", "0"); boolean coverHistory = prefs.getBoolean("CoverHistory", true); // ページ出力カテゴリ boolean coverPage = prefs.getBoolean("CoverPage", true); boolean titlePageWrite = prefs.getBoolean("TitlePageWrite", true); String titlePage = prefs.getString("TitlePage", "middle"); boolean tocPage = prefs.getBoolean("TocPage", true); String tocVertical = prefs.getString("TocVertical", "vertical"); // 出力ファイル設定カテゴリ String ext = prefs.getString("Ext", ".epub"); boolean autoFileName = prefs.getBoolean("AutoFileName", true); boolean overWrite = prefs.getBoolean("OverWrite", true);
- PreferenceManager.getDefaultSharedPreferences(context) は、デフォルトの SharedPreferences インスタンスを取得します。
- ListPreference や EditTextPreference は getString() で取得。
- CheckBoxPreference や SwitchPreferenceCompat は getBoolean() で取得。
- デフォルト値は XML で指定したものと一致させる必要があります(念のため getXXX() にも明示しておくのがベスト)。
PreferenceManager.getDefaultSharedPreferences(context) は、デフォルトの SharedPreferences インスタンスを取得します。
ListPreference や EditTextPreference は getString() で取得。
CheckBoxPreference や SwitchPreferenceCompat は getBoolean() で取得。
デフォルト値は XML で指定したものと一致させる必要があります(念のため getXXX() にも明示しておくのがベスト)。
このコードは、Activity や ViewModel、または PreferenceFragmentCompat を使うアプリでよく使われます。必要であれば Kotlin 版も提供できますし、保存処理や変更監視(OnSharedPreferenceChangeListener)も補足可能です。欲しいですか?
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 出力先
<PreferenceCategory app:title="出力先">
<SwitchPreferenceCompat
app:key="same_path"
app:title="入力と同じ場所に出力"
android:defaultValue="true" />
<EditTextPreference
app:key="output_path"
app:title="出力先フォルダ"
app:summary="出力先を指定します"
app:dialogTitle="フォルダパスを入力"
app:enabled="false" />
</PreferenceCategory>
-->
<!-- 変換 -->
<PreferenceCategory app:title="変換設定">
<ListPreference
app:key="EncType"
app:title="入力文字コード"
app:entries="@array/input_encoding_entries"
app:entryValues="@array/input_encoding_values"
android:defaultValue="AUTO" />
<ListPreference
app:key="LangType"
app:title="言語"
app:entries="@array/language_entries"
app:entryValues="@array/language_values"
android:defaultValue="ja" />
<ListPreference
app:key="Vertical"
app:title="組方向、縦書き/横書き"
app:entries="@array/text_direction_entries"
app:entryValues="@array/text_direction_values"
android:defaultValue="vertical" />
<!--
<Preference
app:key="select_file"
app:title="ファイル選択"
app:summary="ファイルを選択して変換を開始"
/>-->
</PreferenceCategory>
<!-- 挿絵除外 -->
<CheckBoxPreference
app:key="NoIllust"
app:title="挿絵除外"
app:summary="テキストの画像注記は表紙と外字画像以外はePubに格納されません"
android:defaultValue="false" />
<!-- 画面サイズ -->
<PreferenceCategory app:title="画面・表紙サイズ">
<EditTextPreference
app:key="DispW"
app:title="画面 横(px)"
android:inputType="number"
android:defaultValue="1600" />
<EditTextPreference
app:key="DispH"
app:title="画面 縦(px)"
android:inputType="number"
android:defaultValue="2560" />
<EditTextPreference
app:key="CoverW"
app:title="表紙 横(px)"
android:inputType="number"
android:defaultValue="0" />
<EditTextPreference
app:key="CoverH"
app:title="表紙 縦(px)"
android:inputType="number"
android:defaultValue="0" />
</PreferenceCategory>
<!-- 画像倍率 -->
<PreferenceCategory app:title="画像表示倍率">
<CheckBoxPreference
app:key="ImageScaleChecked"
app:title="有効"
app:summary="画面の解像度に合わせて画像の幅を%指定します"
android:defaultValue="false" />
<EditTextPreference
app:key="ImageScale"
app:title="画像表示倍率(倍)"
android:inputType="numberDecimal"
android:defaultValue="1.0" />
</PreferenceCategory>
ChatGPT:
以下は、あなたが挙げた AndroidのPreference XML設定 に対応する、JavaでSharedPreferencesから値を取得するコードです。コメント付きでわかりやすくしています。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 出力先(※コメントアウトされているので一応対応のみ記述) --- boolean samePath = prefs.getBoolean("same_path", true); String outputPath = prefs.getString("output_path", ""); // --- 変換設定 --- String encType = prefs.getString("EncType", "AUTO"); String langType = prefs.getString("LangType", "ja"); String vertical = prefs.getString("Vertical", "vertical"); // --- 挿絵除外設定 --- boolean noIllust = prefs.getBoolean("NoIllust", false); // --- 画面・表紙サイズ --- String dispW = prefs.getString("DispW", "1600"); String dispH = prefs.getString("DispH", "2560"); String coverW = prefs.getString("CoverW", "0"); String coverH = prefs.getString("CoverH", "0"); // --- 画像表示倍率 --- boolean imageScaleChecked = prefs.getBoolean("ImageScaleChecked", false); String imageScale = prefs.getString("ImageScale", "1.0");
- EditTextPreference → getString() で取得(数値でも)
- CheckBoxPreference / SwitchPreferenceCompat → getBoolean() で取得
- ListPreference → getString()(選択された value を返す)
EditTextPreference → getString() で取得(数値でも)
CheckBoxPreference / SwitchPreferenceCompat → getBoolean() で取得
ListPreference → getString()(選択された value を返す)
数値として使いたい場合は、必要に応じて Integer.parseInt() や Float.parseFloat() で変換してください:
int dispWidth = Integer.parseInt(dispW); // 画面幅(px) float scale = Float.parseFloat(imageScale); // 画像倍率
他に、これら設定のリアルタイム変更を検知したい場合は、SharedPreferences.OnSharedPreferenceChangeListener も活用できます。必要であればその実装例も出せます!
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 画像回り込み -->
<PreferenceCategory app:title="画像回り込み (※単ページ化より優先)">
<SwitchPreferenceCompat
app:key="ImageFloat"
app:title="回り込み有効"
app:summary="画像の実サイズが指定サイズ以下の画像を回り込み設定します"
android:defaultValue="false" />
<EditTextPreference
app:key="ImageFloatW"
app:title="横 (px)"
app:dialogTitle="画像回り込み 横サイズ"
android:inputType="number"
android:defaultValue="600" />
<EditTextPreference
app:key="ImageFloatH"
app:title="縦 (px)"
app:dialogTitle="画像回り込み 縦サイズ"
android:inputType="number"
android:defaultValue="400" />
<ListPreference
app:key="ImageFloatType"
app:title="配置"
android:defaultValue="上/左"
app:entries="@array/image_float_position_entries"
app:entryValues="@array/image_float_position_values" />
</PreferenceCategory>
<!-- 画像単ページ化 -->
<PreferenceCategory app:title="画像単ページ化">
<EditTextPreference
app:key="SinglePageSizeW"
app:title="単ページ 横 (px)"
android:inputType="number"
android:defaultValue="200" />
<EditTextPreference
app:key="SinglePageSizeH"
app:title="単ページ 縦 (px)"
android:inputType="number"
android:defaultValue="300" />
<EditTextPreference
app:key="SinglePageWidth"
app:title="横のみ (px)"
android:inputType="number"
android:defaultValue="300" />
<ListPreference
app:key="ImageSizeType"
app:title="縮小表示モード"
android:defaultValue="none"
app:entries="@array/image_size_mode_entries"
app:entryValues="@array/image_size_mode_values" />
<SwitchPreferenceCompat
app:key="FitImage"
app:title="拡大表示"
app:summary="画面サイズより小さい画像を幅高さに合わせて拡大表示します"
android:defaultValue="true" />
</PreferenceCategory>
<!-- Float指定 -->
<PreferenceCategory app:title="Float指定 (Readerのみ)">
<CheckBoxPreference
app:key="ImageFloatPage"
app:title="単ページ画像"
app:summary="単ページ対象の画像をfloat表示します。xhtmlは分割されません" />
<CheckBoxPreference
app:key="ImageFloatBlock"
app:title="通常画像"
app:summary="回り込み、単ページ以外の画像をfloat表示します。64px以上の画像のみ" />
</PreferenceCategory>
<!-- 全画面表示 -->
<PreferenceCategory app:title="全画面表示">
<CheckBoxPreference
app:key="SvgImage"
app:title="SVGタグ出力(画像zipのみ)"
app:summary="画像のみのzipの場合、固定レイアウト+SVGタグで出力します" />
</PreferenceCategory>
<!-- Jpeg圧縮率 -->
<PreferenceCategory app:title="Jpeg圧縮率">
<EditTextPreference
app:key="JpegQuality"
app:title="圧縮率 (30~100)"
app:summary="表紙編集、縮小、回転、余白除去時のJpeg保存時の画質(100が最高画質)"
android:inputType="number"
android:defaultValue="85"/>
</PreferenceCategory>
ChatGPT:
以下は、あなたの提供した Android の <PreferenceScreen>
XML に基づき、対応する SharedPreferences から設定値を Java で取得するコードです。カテゴリごとに整理し、型とデフォルト値に合わせて適切な取得方法で記述しています。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 画像回り込み --- boolean imageFloat = prefs.getBoolean("ImageFloat", false); String imageFloatW = prefs.getString("ImageFloatW", "600"); String imageFloatH = prefs.getString("ImageFloatH", "400"); String imageFloatType = prefs.getString("ImageFloatType", "上/左"); // --- 画像単ページ化 --- String singlePageSizeW = prefs.getString("SinglePageSizeW", "200"); String singlePageSizeH = prefs.getString("SinglePageSizeH", "300"); String singlePageWidth = prefs.getString("SinglePageWidth", "300"); String imageSizeType = prefs.getString("ImageSizeType", "1"); boolean fitImage = prefs.getBoolean("FitImage", true); // --- Float指定(Readerのみ)--- boolean imageFloatPage = prefs.getBoolean("ImageFloatPage", false); boolean imageFloatBlock = prefs.getBoolean("ImageFloatBlock", false); // --- 全画面表示 --- boolean svgImage = prefs.getBoolean("SvgImage", false); // --- Jpeg圧縮率 --- String jpegQuality = prefs.getString("JpegQuality", "85");
- EditTextPreference の値(数値)は String で取得されるため、必要に応じて以下のように変換して使用:
EditTextPreference の値(数値)は String で取得されるため、必要に応じて以下のように変換して使用:
int floatW = Integer.parseInt(imageFloatW); int quality = Integer.parseInt(jpegQuality);
- ListPreference も getString() で value を取得(表示名ではなく value)
ListPreference も getString() で value を取得(表示名ではなく value)
このコードで、XML の設定と完全に対応する SharedPreferences 値が取得できます。もしこれらの値を使って設定画面の更新をリアルタイムに反映したい場合、SharedPreferences.OnSharedPreferenceChangeListener の実装例もご提供できます。必要でしたらお知らせください!
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 色調整 -->
<PreferenceCategory app:title="色調整">
<CheckBoxPreference
app:key="Gamma"
app:title="ガンマ補正"
app:summary="画像の濃さを変更します (濃:0.2~1.8:淡)" />
<EditTextPreference
app:key="GammaValue"
app:title="ガンマ値"
app:summary="例: 1.0"
android:inputType="numberDecimal" />
</PreferenceCategory>
<!-- 画像縮小回転 -->
<PreferenceCategory android:title="画像縮小回転">
<!-- 横縮小 -->
<CheckBoxPreference
android:key="ResizeW"
android:title="横: 有効化"
android:defaultValue="false"/>
<EditTextPreference
android:key="ResizeNumW"
android:title="横(px以下)"
android:inputType="number"
android:defaultValue="2048"/>
<!-- 縦縮小 -->
<CheckBoxPreference
android:key="ResizeH"
android:title="縦: 有効化"
android:defaultValue="false"/>
<EditTextPreference
android:key="ResizeNumH"
android:title="縦(px以下)"
android:inputType="number"
android:defaultValue="2048"/>
<!-- 自動回転 -->
<ListPreference
android:key="RotateImage"
android:title="自動回転"
android:summary="単ページ時画面の縦横比に合わせて画像を回転します"
android:entries="@array/rotate_options"
android:entryValues="@array/rotate_values"
android:defaultValue="none" />
</PreferenceCategory>
ChatGPT:
以下は、あなたが提供した Android の <PreferenceScreen>
XML の「色調整」と「画像縮小回転」セクションに対応した、Java で SharedPreferences から設定値を取得するコードです。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 色調整 --- boolean gamma = prefs.getBoolean("Gamma", false); String gammaValue = prefs.getString("GammaValue", ""); // 空文字をデフォルトに設定 // --- 画像縮小回転 --- // 横縮小 boolean resizeW = prefs.getBoolean("ResizeW", false); String resizeNumW = prefs.getString("ResizeNumW", "2048"); // 縦縮小 boolean resizeH = prefs.getBoolean("ResizeH", false); String resizeNumH = prefs.getString("ResizeNumH", "2048"); // 自動回転 String rotateImage = prefs.getString("RotateImage", "0");
// ガンマ値など数値として使いたい場合はパース float gammaFloat = 1.0f; try { gammaFloat = Float.parseFloat(gammaValue); } catch (NumberFormatException e) { // デフォルト値を使う、もしくはエラーハンドリング } int resizeWidth = Integer.parseInt(resizeNumW); int resizeHeight = Integer.parseInt(resizeNumH);
- CheckBoxPreference → getBoolean
- EditTextPreference(数値入力あり)→ getString(数値化するには変換が必要)
- ListPreference → getString(value を取得)
CheckBoxPreference → getBoolean
EditTextPreference(数値入力あり)→ getString(数値化するには変換が必要)
ListPreference → getString(value を取得)
必要であれば、この設定値を反映して画像処理や表示制御に使うロジック例もお手伝いできます!また他の設定セクションの続きもお気軽にどうぞ。
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 余白除去 -->
<PreferenceCategory android:title="余白除去">
<SwitchPreferenceCompat
android:key="AutoMargin"
android:title="有効"
android:defaultValue="false" />
<EditTextPreference
android:key="AutoMarginLimitH"
android:title="横方向の余白除去量 (%)"
android:defaultValue="15"
android:enabled="false"
android:inputType="number" />
<EditTextPreference
android:key="AutoMarginLimitV"
android:title="縦方向の余白除去量 (%)"
android:defaultValue="15"
android:enabled="false"
android:inputType="number" />
<EditTextPreference
android:key="AutoMarginPadding"
android:title="余白追加量 (%)"
android:defaultValue="1.0"
android:enabled="false"
android:inputType="numberDecimal" />
<EditTextPreference
android:key="AutoMarginWhiteLevel"
android:title="白レベル (0〜100)"
android:defaultValue="80"
android:enabled="false"
android:inputType="number" />
<ListPreference
android:key="AutoMarginNombre"
android:title="ノンブル除去位置"
android:defaultValue="none"
android:entries="@array/nombre_position_entries"
android:entryValues="@array/nombre_position_values" />
<EditTextPreference
android:key="AutoMarginNombreSize"
android:title="ノンブル高さ (%)"
android:defaultValue="3.0"
android:enabled="false"
android:inputType="numberDecimal" />
</PreferenceCategory>
<!-- 文中全角スペースの処理 -->
<PreferenceCategory android:title="文中全角スペースの処理">
<ListPreference
android:key="sSpaceHyphenation"
android:title="行末で非表示"
android:entries="@array/space_handling_entries"
android:entryValues="@array/space_handling_values"
android:defaultValue="default"
android:summary="%s" />
</PreferenceCategory>
<!-- 「○○」に「××」の注記 -->
<PreferenceCategory android:title="「○○」に「××」の注記">
<ListPreference
android:key="ChukiRuby"
android:title="注記の表示方法"
android:entries="@array/annotation_entries"
android:entryValues="@array/annotation_values"
android:defaultValue="0"
android:summary="%s" />
</PreferenceCategory>
<!-- 自動縦中横 -->
<PreferenceCategory android:title="自動縦中横">
<SwitchPreferenceCompat
android:key="AutoYoko"
android:title="有効"
android:defaultValue="true"
android:summary="2文字の数字、!?を縦中横で表示します。" />
<CheckBoxPreference
android:key="AutoYokoNum1"
android:title="1桁数字を縦中横"
android:defaultValue="false" />
<CheckBoxPreference
android:key="AutoYokoNum3"
android:title="3桁数字を縦中横"
android:defaultValue="false" />
<CheckBoxPreference
android:key="AutoYokoEQ1"
android:title="!? 1文字"
android:defaultValue="false" />
</PreferenceCategory>
<!-- コメントブロック出力 -->
<PreferenceCategory android:title="コメントブロック出力">
<CheckBoxPreference
android:key="CommentPrint"
android:title="コメント出力"
android:summary="コメント行の間を出力します"
android:defaultValue="false" />
<CheckBoxPreference
android:key="CommentConvert"
android:title="コメント内注記変換"
android:summary="コメント内の注記を変換します"
android:defaultValue="false" />
</PreferenceCategory>
ChatGPT:
以下は、提供してくれた Android の <PreferenceScreen>
XML の各設定カテゴリに対応する Java での SharedPreferences prefs からの取得コードです。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 余白除去 --- boolean autoMargin = prefs.getBoolean("AutoMargin", false); String autoMarginLimitH = prefs.getString("AutoMarginLimitH", "15"); String autoMarginLimitV = prefs.getString("AutoMarginLimitV", "15"); String autoMarginPadding = prefs.getString("AutoMarginPadding", "1.0"); String autoMarginWhiteLevel = prefs.getString("AutoMarginWhiteLevel", "80"); String autoMarginNombre = prefs.getString("AutoMarginNombre", "0"); String autoMarginNombreSize = prefs.getString("AutoMarginNombreSize", "3.0"); // --- 文中全角スペースの処理 --- String sSpaceHyphenation = prefs.getString("sSpaceHyphenation", "0"); // --- 「○○」に「××」の注記 --- String chukiRuby = prefs.getString("ChukiRuby", "0"); // --- 自動縦中横 --- boolean autoYoko = prefs.getBoolean("AutoYoko", true); boolean autoYokoNum1 = prefs.getBoolean("AutoYokoNum1", false); boolean autoYokoNum3 = prefs.getBoolean("AutoYokoNum3", false); boolean autoYokoEQ1 = prefs.getBoolean("AutoYokoEQ1", false); // --- コメントブロック出力 --- boolean commentPrint = prefs.getBoolean("CommentPrint", false); boolean commentConvert = prefs.getBoolean("CommentConvert", false);
float marginPadding = 1.0f; try { marginPadding = Float.parseFloat(autoMarginPadding); } catch (NumberFormatException e) { // fallback } int limitH = Integer.parseInt(autoMarginLimitH); int limitV = Integer.parseInt(autoMarginLimitV); int whiteLevel = Integer.parseInt(autoMarginWhiteLevel); float nombreSize = Float.parseFloat(autoMarginNombreSize);
設定XMLキー | 取得メソッド | デフォルト |
---|---|---|
SwitchPreferenceCompat | getBoolean | true/false |
CheckBoxPreference | getBoolean | true/false |
EditTextPreference | getString | "..." |
ListPreference | getString | "..." |
もしこの設定値を使ったロジック(画像処理や変換処理)を書く場合もお手伝いできます!他のセクションも必要であれば教えてください。
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 栞用ID -->
<PreferenceCategory android:title="栞用ID">
<CheckBoxPreference
android:key="MarkId"
android:title="各行に出力"
android:summary="Kobo向けの栞を記憶するためのIDを各行に設定します"
android:defaultValue="false" />
</PreferenceCategory>
<!-- 空行除去 -->
<PreferenceCategory android:title="空行除去">
<ListPreference
android:key="RemoveEmptyLine"
android:title="空行を減らす"
android:summary="空行の行数を減らします。見出し行の後ろ3行以内は1行残します"
android:entries="@array/remove_empty_line_entries"
android:entryValues="@array/remove_empty_line_values"
android:defaultValue="0" />
<ListPreference
android:key="MaxEmptyLine"
android:title="最大空行数"
android:summary="空行の連続を指定行数以下に制限します"
android:entries="@array/max_empty_line_entries"
android:entryValues="@array/max_empty_line_values"
android:defaultValue="-" />
</PreferenceCategory>
<!-- 行頭字下げ -->
<PreferenceCategory android:title="行頭字下げ">
<CheckBoxPreference
android:key="ForceIndent"
android:title="字下げ有効"
android:summary="行頭が「『―”(〈〔【と全角空白以外なら行頭に全角空白を追加します。半角空白のみは全角に置き換えます"
android:defaultValue="false" />
</PreferenceCategory>
<!-- 強制改ページ -->
<PreferenceCategory android:title="強制改ページ">
<!-- 強制改ページ有効 -->
<CheckBoxPreference
android:key="PageBreak"
android:title="有効"
android:summary="指定サイズを超えた時点で強制改ページ(ブロック注記の外側のみ)"
android:defaultValue="true" />
<!-- 改ページサイズ(KB) -->
<EditTextPreference
android:key="PageBreakSize"
android:title="改ページサイズ"
android:summary="改ページ判定に使う本文サイズ(KB)"
android:defaultValue="400"
android:inputType="number" />
<!-- 空行による改ページの有効化 -->
<CheckBoxPreference
android:key="PageBreakEmpty"
android:title="空行による改ページ"
android:summary="指定行数以上の空行で改ページ(サイズ制限付き)"
android:defaultValue="false" />
<!-- 空行行数 -->
<ListPreference
android:key="PageBreakEmptyLine"
android:title="空行行数"
android:summary="空行の行数(1〜9)"
android:entries="@array/page_break_empty_line_entries"
android:entryValues="@array/page_break_empty_line_values"
android:defaultValue="2" />
<!-- 空行サイズ制限 -->
<EditTextPreference
android:key="PageBreakEmptySize"
android:title="空行による改ページのサイズ制限(KB)"
android:summary="空行による改ページが発動する本文サイズ"
android:defaultValue="300"
android:inputType="number" />
<!-- 見出し前の改ページ -->
<CheckBoxPreference
android:key="PageBreakChapter"
android:title="見出し前で改ページ"
android:summary="見出し前で改ページを入れる(サイズ制限付き)"
android:defaultValue="false" />
<!-- 見出し前の改ページサイズ -->
<EditTextPreference
android:key="PageBreakChapterSize"
android:title="見出し前の改ページサイズ(KB)"
android:summary="見出し前で改ページする際の本文サイズ制限"
android:defaultValue="200"
android:inputType="number" />
</PreferenceCategory>
ChatGPT:
以下は、提供された Android の <PreferenceScreen>
の設定に対応する Javaコード(SharedPreferences prefs からの取得)です。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 栞用ID --- boolean markId = prefs.getBoolean("MarkId", false); // --- 空行除去 --- String removeEmptyLine = prefs.getString("RemoveEmptyLine", "0"); String maxEmptyLine = prefs.getString("MaxEmptyLine", "-"); // --- 行頭字下げ --- boolean forceIndent = prefs.getBoolean("ForceIndent", false); // --- 強制改ページ --- boolean pageBreak = prefs.getBoolean("PageBreak", true); String pageBreakSizeStr = prefs.getString("PageBreakSize", "400"); boolean pageBreakEmpty = prefs.getBoolean("PageBreakEmpty", false); String pageBreakEmptyLine = prefs.getString("PageBreakEmptyLine", "2"); String pageBreakEmptySizeStr = prefs.getString("PageBreakEmptySize", "300"); boolean pageBreakChapter = prefs.getBoolean("PageBreakChapter", false); String pageBreakChapterSizeStr = prefs.getString("PageBreakChapterSize", "200");
int pageBreakSize = 400; try { pageBreakSize = Integer.parseInt(pageBreakSizeStr); } catch (NumberFormatException e) { /* fallback */ } int pageBreakEmptySize = 300; try { pageBreakEmptySize = Integer.parseInt(pageBreakEmptySizeStr); } catch (NumberFormatException e) { /* fallback */ } int pageBreakChapterSize = 200; try { pageBreakChapterSize = Integer.parseInt(pageBreakChapterSizeStr); } catch (NumberFormatException e) { /* fallback */ }
設定キー | 種類 | Java取得メソッド | 備考 |
---|---|---|---|
CheckBoxPreference | boolean | prefs.getBoolean(...) | true/false |
ListPreference | string | prefs.getString(...) | 選択値(value)として取得 |
EditTextPreference | string | prefs.getString(...) | 数値変換が必要な場合は parseInt/parseFloat |
他のPreference画面や、取得した値を使って処理するコード(例:EPUB変換処理)もあれば手伝います!お気軽にどうぞ。
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 目次設定 -->
<PreferenceCategory android:title="目次設定">
<!-- 最大文字数 -->
<EditTextPreference
android:key="MaxChapterNameLength"
android:title="最大文字数"
android:summary="見出しの最大文字数"
android:defaultValue="64"
android:inputType="number" />
<!-- 表紙を目次に追加 -->
<CheckBoxPreference
android:key="CoverPageToc"
android:title="表紙"
android:summary="表紙画像のページを目次に追加します"
android:defaultValue="false" />
<!-- 表題を目次に追加 -->
<CheckBoxPreference
android:key="TitleToc"
android:title="表題"
android:summary="表題の行を目次に追加します"
android:defaultValue="true" />
<!-- 次の行を繋げる -->
<CheckBoxPreference
android:key="ChapterUseNextLine"
android:title="次の行を繋げる"
android:summary="次の行が空行でなければ見出しの後ろに繋げます"
android:defaultValue="false" />
<!-- 連続する見出しを除外 -->
<CheckBoxPreference
android:key="ChapterExclude"
android:title="連続する見出しを除外"
android:summary="3つ以上連続する自動抽出された見出しを除外します(空行1行間隔も連続扱い)"
android:defaultValue="true" />
<!-- nav階層化 -->
<CheckBoxPreference
android:key="NavNest"
android:title="目次ページ階層化"
android:summary="目次ページ(nav.xhtml)を階層化します"
android:defaultValue="true" />
<!-- ncx階層化 -->
<CheckBoxPreference
android:key="NcxNest"
android:title="目次(ncx)階層化"
android:summary="目次(toc.ncx)を階層化します"
android:defaultValue="true" />
</PreferenceCategory>
ChatGPT:
以下は、あなたが提供した Android の <PreferenceScreen>
に対応する Java コードです。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); を使用して、設定値を取得します。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 目次設定 --- String maxChapterNameLengthStr = prefs.getString("MaxChapterNameLength", "64"); int maxChapterNameLength = 64; try { maxChapterNameLength = Integer.parseInt(maxChapterNameLengthStr); } catch (NumberFormatException e) { // フォールバック処理(必要に応じてログなど) } boolean coverPageToc = prefs.getBoolean("CoverPageToc", false); boolean titleToc = prefs.getBoolean("TitleToc", true); boolean chapterUseNextLine = prefs.getBoolean("ChapterUseNextLine", false); boolean chapterExclude = prefs.getBoolean("ChapterExclude", true); boolean navNest = prefs.getBoolean("NavNest", true); boolean ncxNest = prefs.getBoolean("NcxNest", true);
設定キー | Preference種類 | Javaでの取得方法 |
---|---|---|
MaxChapterNameLength | EditTextPreference | prefs.getString(...) → parseInt() |
CoverPageToc | CheckBoxPreference | prefs.getBoolean(...) |
TitleToc | CheckBoxPreference | prefs.getBoolean(...) |
ChapterUseNextLine | CheckBoxPreference | prefs.getBoolean(...) |
ChapterExclude | CheckBoxPreference | prefs.getBoolean(...) |
NavNest | CheckBoxPreference | prefs.getBoolean(...) |
NcxNest | CheckBoxPreference | prefs.getBoolean(...) |
必要であれば、取得した値を使って処理する部分(例えば目次の自動生成ロジックなど)への反映方法もお手伝いできますよ!
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 目次抽出 -->
<PreferenceCategory android:title="目次抽出">
<!-- 見出し注記 -->
<CheckBoxPreference
android:key="ChapterH"
android:title="見出し"
android:defaultValue="true" />
<CheckBoxPreference
android:key="ChapterH1"
android:title="大見出し"
android:defaultValue="true" />
<CheckBoxPreference
android:key="ChapterH2"
android:title="中見出し"
android:defaultValue="true" />
<CheckBoxPreference
android:key="ChapterH3"
android:title="小見出し"
android:defaultValue="true" />
<CheckBoxPreference
android:key="SameLineChapter"
android:title="同行見出し含む"
android:defaultValue="false" />
<!-- 改ページ後 -->
<CheckBoxPreference
android:key="ChapterSection"
android:title="改ページ後"
android:summary="改ページ後の先頭行の文字を目次に出力します"
android:defaultValue="true" />
<!-- 章見出し -->
<CheckBoxPreference
android:key="ChapterName"
android:title="章見出し (第~章/その~/~章/序/プロローグ 等)"
android:summary="第~話/第~章/第~篇/第~部/第~節/第~幕/第~編/その~/~章/プロローグ/エピローグ/モノローグ/序/序章/終章/転章/間章/幕間"
android:defaultValue="true" />
<!-- 数字系 -->
<CheckBoxPreference
android:key="ChapterNumOnly"
android:title="数字のみ"
android:defaultValue="false" />
<CheckBoxPreference
android:key="ChapterNumTitle"
android:title="数字+見出し"
android:defaultValue="false" />
<CheckBoxPreference
android:key="ChapterNumParen"
android:title="括弧内数字のみ"
android:summary="()〈〉〔〕【】内の数字"
android:defaultValue="false" />
<CheckBoxPreference
android:key="ChapterNumParenTitle"
android:title="括弧内数字+見出し"
android:defaultValue="false" />
<!-- その他パターン -->
<CheckBoxPreference
android:key="ChapterPattern"
android:title="その他パターン"
android:summary="目次抽出パターンを正規表現で指定します。前後の空白とタグを除いた文字列と比較します。"
android:defaultValue="false" />
<ListPreference
android:key="ChapterPatternText"
android:title="パターン選択"
android:entries="@array/chapter_patterns_entries"
android:entryValues="@array/chapter_patterns_values"
android:defaultValue="^(見出し1|見出し2|見出し3)$"
android:enabled="true" />
</PreferenceCategory>
<!-- スタイル -->
<PreferenceCategory android:title="スタイル">
<!-- 行の高さ -->
<EditTextPreference
android:key="LineHeight"
android:title="行の高さ"
android:dialogTitle="行の高さを入力"
android:inputType="numberDecimal"
android:defaultValue="1.8"
android:summary="1.3 ~ 2.0" />
<!-- 文字サイズ -->
<EditTextPreference
android:key="FontSize"
android:title="文字サイズ (%)"
android:dialogTitle="文字サイズを入力"
android:inputType="number"
android:defaultValue="100"
android:summary="75 ~ 125%" />
</PreferenceCategory>
ChatGPT:
以下は、上記の <PreferenceScreen>
に対応する Android 向け Java コードです。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); を使って取得する形に変換しています。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 目次抽出 --- boolean chapterH = prefs.getBoolean("ChapterH", true); boolean chapterH1 = prefs.getBoolean("ChapterH1", true); boolean chapterH2 = prefs.getBoolean("ChapterH2", true); boolean chapterH3 = prefs.getBoolean("ChapterH3", true); boolean sameLineChapter = prefs.getBoolean("SameLineChapter", false); boolean chapterSection = prefs.getBoolean("ChapterSection", true); boolean chapterName = prefs.getBoolean("ChapterName", true); boolean chapterNumOnly = prefs.getBoolean("ChapterNumOnly", false); boolean chapterNumTitle = prefs.getBoolean("ChapterNumTitle", false); boolean chapterNumParen = prefs.getBoolean("ChapterNumParen", false); boolean chapterNumParenTitle = prefs.getBoolean("ChapterNumParenTitle", false); boolean chapterPattern = prefs.getBoolean("ChapterPattern", false); // ListPreference の値(文字列として取得) String chapterPatternText = prefs.getString("ChapterPatternText", "^(見出し1|見出し2|見出し3)$"); // --- スタイル --- String lineHeightStr = prefs.getString("LineHeight", "1.8"); float lineHeight = 1.8f; try { lineHeight = Float.parseFloat(lineHeightStr); } catch (NumberFormatException e) { // フォールバック処理 } String fontSizeStr = prefs.getString("FontSize", "100"); int fontSize = 100; try { fontSize = Integer.parseInt(fontSizeStr); } catch (NumberFormatException e) { // フォールバック処理 }
キー | 型 | Javaでの取得方法 |
---|---|---|
ChapterH, ChapterH1, ChapterH2, ChapterH3, SameLineChapter, ChapterSection, ChapterName, ChapterNumOnly, ChapterNumTitle, ChapterNumParen, ChapterNumParenTitle, ChapterPattern | CheckBoxPreference | prefs.getBoolean(...) |
ChapterPatternText | ListPreference | prefs.getString(...) |
LineHeight | EditTextPreference (float) | prefs.getString(...) → Float.parseFloat() |
FontSize | EditTextPreference (int) | prefs.getString(...) → Integer.parseInt() |
必要に応じて、これらの設定を使った処理ロジックや、デフォルト値・バリデーションの詳細も対応できます。続きがあれば気軽にどうぞ!
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- 太字ゴシック表示 -->
<PreferenceCategory android:title="太字ゴシック表示">
<CheckBoxPreference
android:key="BoldUseGothic"
android:title="太字注記"
android:summary="太字注記を太字ゴシックで表示"
android:defaultValue="false" />
<CheckBoxPreference
android:key="GothicUseBold"
android:title="ゴシック体注記"
android:summary="ゴシック体注記を太字ゴシックで表示"
android:defaultValue="false" />
</PreferenceCategory>
<!-- テキスト余白 -->
<PreferenceCategory android:title="テキスト余白 (@page margin)">
<EditTextPreference
android:key="PageMarginTop"
android:title="上"
android:inputType="numberDecimal"
android:defaultValue="0.5" />
<EditTextPreference
android:key="PageMarginRight"
android:title="右"
android:inputType="numberDecimal"
android:defaultValue="0.5" />
<EditTextPreference
android:key="PageMarginBottom"
android:title="下"
android:inputType="numberDecimal"
android:defaultValue="0.5" />
<EditTextPreference
android:key="PageMarginLeft"
android:title="左"
android:inputType="numberDecimal"
android:defaultValue="0.5" />
<!-- 単位選択 -->
<ListPreference
android:key="PageMarginUnit"
android:title="単位"
android:entries="@array/margin_units"
android:entryValues="@array/margin_units_values"
android:defaultValue="char" />
</PreferenceCategory>
<!-- テキスト余白 (html margin) Reader用 -->
<PreferenceCategory android:title="テキスト余白 (html margin) Reader用">
<EditTextPreference
android:key="BodyMarginTop"
android:title="上"
android:inputType="numberDecimal"
android:defaultValue="0" />
<EditTextPreference
android:key="BodyMarginRight"
android:title="右"
android:inputType="numberDecimal"
android:defaultValue="0" />
<EditTextPreference
android:key="BodyMarginBottom"
android:title="下"
android:inputType="numberDecimal"
android:defaultValue="0" />
<EditTextPreference
android:key="BodyMarginLeft"
android:title="左"
android:inputType="numberDecimal"
android:defaultValue="0" />
<!-- 単位選択 -->
<ListPreference
android:key="BodyMarginUnit"
android:title="単位"
android:entries="@array/margin_units"
android:entryValues="@array/margin_units_values"
android:defaultValue="char" />
</PreferenceCategory>
<!-- 文字出力 -->
<PreferenceCategory android:title="文字出力">
<!-- 濁点/半濁点文字 -->
<ListPreference
android:key="DakutenType"
android:title="濁点/半濁点文字の出力"
android:dialogTitle="濁点/半濁点文字の出力方法を選択"
android:entries="@array/dakuten_output_options"
android:entryValues="@array/dakuten_output_values"
android:defaultValue="font"
android:summary="濁点/半濁点文字の出力方法を選択します" />
</PreferenceCategory>
ChatGPT:
以下は、あなたが挙げた Android PreferenceScreen に対応する Java の SharedPreferences 取得コードです。 PreferenceManager.getDefaultSharedPreferences(context) を使ってすべての設定値を読み取るようにしています。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- 太字ゴシック表示 --- boolean boldUseGothic = prefs.getBoolean("BoldUseGothic", false); boolean gothicUseBold = prefs.getBoolean("GothicUseBold", false); // --- テキスト余白 (@page margin) --- float pageMarginTop = parseFloat(prefs.getString("PageMarginTop", "0.5"), 0.5f); float pageMarginRight = parseFloat(prefs.getString("PageMarginRight", "0.5"), 0.5f); float pageMarginBottom = parseFloat(prefs.getString("PageMarginBottom", "0.5"), 0.5f); float pageMarginLeft = parseFloat(prefs.getString("PageMarginLeft", "0.5"), 0.5f); String pageMarginUnit = prefs.getString("PageMarginUnit", "em"); // --- テキスト余白 (html margin) Reader用 --- float bodyMarginTop = parseFloat(prefs.getString("BodyMarginTop", "0"), 0f); float bodyMarginRight = parseFloat(prefs.getString("BodyMarginRight", "0"), 0f); float bodyMarginBottom = parseFloat(prefs.getString("BodyMarginBottom", "0"), 0f); float bodyMarginLeft = parseFloat(prefs.getString("BodyMarginLeft", "0"), 0f); String bodyMarginUnit = prefs.getString("BodyMarginUnit", "em"); // --- 文字出力 --- String dakutenType = prefs.getString("DakutenType", "2"); // --- ヘルパー関数 --- private float parseFloat(String str, float defaultValue) { try { return Float.parseFloat(str); } catch (NumberFormatException e) { return defaultValue; } }
キー名 | 型 | Javaでの取得 |
---|---|---|
BoldUseGothic, GothicUseBold | CheckBoxPreference | prefs.getBoolean(..., false) |
PageMarginTop, Right, Bottom, Left | EditTextPreference (float) | prefs.getString(..., "0.5") → parseFloat() |
PageMarginUnit | ListPreference | prefs.getString(..., "char") |
BodyMarginTop, Right, Bottom, Left | EditTextPreference (float) | prefs.getString(..., "0") → parseFloat() |
BodyMarginUnit | ListPreference | prefs.getString(..., "char") |
DakutenType | ListPreference | prefs.getString(..., "font") |
このままプロジェクトに組み込めるよう、例外処理も考慮しています。さらに他の設定があれば続けて書き出せますので、必要があれば気軽にどうぞ!
あなた:
android向けに書き換えて、JavaでSharedPreferences prefsから取得するとする。
<!-- IVS出力 -->
<PreferenceCategory android:title="IVS出力 (Kobo, Kindle非対応)">
<CheckBoxPreference
android:key="IvsBMP"
android:title="英数字用 (U+FE00-FE0E)"
android:summary="英数字、絵文字向けのIVSを出力"
android:defaultValue="false" />
<CheckBoxPreference
android:key="IvsSSP"
android:title="漢字用 (U+E0100-E01EF)"
android:summary="漢字用のIVSを出力"
android:defaultValue="false" />
</PreferenceCategory>
<!-- Web -->
<PreferenceCategory android:title="Web">
</PreferenceCategory>
<PreferenceCategory android:title="取得設定">
<EditTextPreference
android:key="WebInterval"
android:title="取得間隔"
android:summary="Web小説の取得間隔(秒)を設定します"
android:defaultValue="0.5"
android:inputType="numberDecimal" />
</PreferenceCategory>
<PreferenceCategory android:title="UA設定">
<ListPreference
android:key="UserAgent"
android:title="ユーザーエージェント"
android:summary="ユーザーエージェントを設定します"
android:entries="@array/ua_entries"
android:entryValues="@array/ua_values"
android:defaultValue="" />
</PreferenceCategory>
<PreferenceCategory android:title="Web画像設定">
<CheckBoxPreference
android:key="jCheckWebLageImage"
android:title="画像大"
android:summary="Web画像のオリジナルを取得" />
</PreferenceCategory>
<!-- キャッシュパスは固定
<PreferenceCategory android:title="キャッシュ保存パス">
<EditTextPreference
android:key="CachePath"
android:title="保存パス"
android:summary="キャッシュファイルを保存するパスです。フルパスまたは相対パスを指定"
android:defaultValue=".cache" />
</PreferenceCategory>
-->
<PreferenceCategory android:title="更新判定">
<EditTextPreference
android:key="WebModifiedExpire"
android:title="更新間隔"
android:summary="この時間以内に取得したキャッシュを更新分として処理します"
android:defaultValue="24"
android:inputType="number" />
</PreferenceCategory>
<PreferenceCategory android:title="ePub出力設定">
<CheckBoxPreference
android:key="WebConvertUpdated"
android:title="更新時のみ出力"
android:summary="新規追加または更新がある場合のみePubを出力します" />
</PreferenceCategory>
<PreferenceCategory android:title="変換対象">
<CheckBoxPreference
android:key="WebBeforeChapter"
android:title="最新"
android:summary="最新話から指定話数のみ出力します"
android:defaultValue="false"/>
<EditTextPreference
android:key="WebBeforeChapterCount"
android:title="出力話数"
android:summary="最新話からの出力数"
android:defaultValue="1"
android:inputType="number" />
<CheckBoxPreference
android:key="WebModifiedOnly"
android:title="更新分"
android:summary="追加更新のあった話のみ変換します"
android:defaultValue="false"/>
<CheckBoxPreference
android:key="WebModifiedTail"
android:title="連続"
android:summary="最新話から連続した更新分のみ変換します"
android:defaultValue="false"/>
</PreferenceCategory>
ChatGPT:
以下は、提示された Android の <PreferenceScreen>
に対応する Java コードで、SharedPreferences prefs を使って各設定を取得するコードです。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // --- IVS出力 --- boolean ivsBMP = prefs.getBoolean("IvsBMP", false); boolean ivsSSP = prefs.getBoolean("IvsSSP", false); // --- Web取得設定 --- float webInterval = parseFloat(prefs.getString("WebInterval", "0.5"), 0.5f); // --- ユーザーエージェント設定 --- String userAgent = prefs.getString("UserAgent", ""); // --- Web画像設定 --- boolean checkWebLargeImage = prefs.getBoolean("jCheckWebLageImage", false); // --- 更新判定 --- int webModifiedExpire = parseInt(prefs.getString("WebModifiedExpire", "24"), 24); // --- ePub出力設定 --- boolean webConvertUpdated = prefs.getBoolean("WebConvertUpdated", false); // --- 変換対象 --- boolean webBeforeChapter = prefs.getBoolean("WebBeforeChapter", false); int webBeforeChapterCount = parseInt(prefs.getString("WebBeforeChapterCount", "1"), 1); boolean webModifiedOnly = prefs.getBoolean("WebModifiedOnly", false); boolean webModifiedTail = prefs.getBoolean("WebModifiedTail", false);
private float parseFloat(String str, float defaultValue) { try { return Float.parseFloat(str); } catch (NumberFormatException e) { return defaultValue; } } private int parseInt(String str, int defaultValue) { try { return Integer.parseInt(str); } catch (NumberFormatException e) { return defaultValue; } }
キー名 | 型 | Javaでの取得 |
---|---|---|
IvsBMP, IvsSSP | CheckBoxPreference | prefs.getBoolean(..., false) |
WebInterval | EditTextPreference (float) | prefs.getString(...) → parseFloat() |
UserAgent | ListPreference | prefs.getString(..., "") |
jCheckWebLageImage | CheckBoxPreference | prefs.getBoolean(..., false) |
WebModifiedExpire | EditTextPreference (int) | prefs.getString(...) → parseInt() |
WebConvertUpdated | CheckBoxPreference | prefs.getBoolean(..., false) |
WebBeforeChapter | CheckBoxPreference | prefs.getBoolean(..., false) |
WebBeforeChapterCount | EditTextPreference (int) | prefs.getString(...) → parseInt() |
WebModifiedOnly, WebModifiedTail | CheckBoxPreference | prefs.getBoolean(..., false) |
すべての設定値が SharedPreferences から安全に読み込めるようになっています。これで PreferenceScreen に対応した設定の取得は完了です。他にも PreferenceScreen 項目があれば続けて変換します!