hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

EBWin4 のドッキングウインドウ化を実験中

KWIC Finderのリニューアルで導入したドッキングウィンドウがなかなか便利なので、EBWin4にも導入してみることにした。
C#Windows Form のドッキングウィンドウのライブラリには、DockPanel Suiteを使用している。

DockPanel Suite - The .NET WinForms Docking Library

ドッキングウィンドウ化したEBWin4の画面例。

f:id:hishida:20190519083645p:plain

検索結果、ブックマーク、検索履歴、複合検索パネル、辞書本文を独自のペインとして画面上の好きなところに配置できる。
辞書本文はタブ形式で表示することもできるし、タイル形式で配置することもできる。

次の画面では、辞書本文はタブ形式表示で、複合検索パネルと検索結果を並べて表示している例。

f:id:hishida:20190519083709p:plain

手元ではほぼ動いているが、大型のアップデートなのでまだ一ヶ月くらいはテスト期間をおいてから公開したい。

こういう便利なライブラリが簡単に見つかるのがC#のいいところだ。EBMacも同様の複数辞書表示をしてほしいという要望が過去にあったが、Mac版の実装はたぶん無理だと思う。

Android 1.6用のEBPocket for Androidの公開

IS01やIS02などの古いAndroid1.6用のEBPocketがGoogle Playから落とせなくなっているという報告をいただいたので、Android1.6用の最終のEBPocket 1.15.0を公開することにしました。

下記HPからダウンロードし、実機に転送してファイルブラウザでタップするとインストールされます。

EBPocket for Android

読書尚友 夜間モード

macOS Mojave でダークモードが搭載され、他OSでも流行りそうな気配である。

AndroidではAndroid N Developer Preview(初期版)では夜間モードがあったが、実際の製品では搭載が見送られた。だがスマートフォンの場合はバッテリの持ちが長くなるメリットがあるため、将来的に標準搭載されると思う。Twitterのようにアプリレベルで夜間モードを搭載しているものもある。

実はSupport Library の AppCompat 23.2.0 以降、DayNight テーマが導入されており、アプリレベルでの実装が簡単になった

qiita.com

ということで読書尚友にも夜間モードを実装してみた。

f:id:hishida:20190206163531j:plain

f:id:hishida:20190206163543j:plain

f:id:hishida:20190206163555j:plain

f:id:hishida:20190206163606j:plain

読書画面の背景色はこれまでもカスタマイズできたが、すべての画面のパーツの背景色をダークモードに切り替えられるのがミソである。

 

実装方法

ActivityのテーマのベースにTheme.AppCompat.DayNightを使用します。

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.ActionBar">
<item name="windowActionBar">true</item>
<item name="windowNoTitle">false</item>
</style>

</resources>

 

 

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="textColorPrimary">#FFFFFF</color>

</resources>

 

 

AndroidManifest.xml

<activity android:name="MainActivity"

android:label="@string/app_name"              android:theme="@style/AppTheme.ActionBar" >

</activity>

 

 アプリでは、OnCreateの先頭で夜間モードを設定します。

MainActivity.java

public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {

if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
}
super.onCreate(savedInstanceState);
.....

 

 

AppCompatDelegate.MODE_NIGHT_AUTO 自動切替
AppCompatDelegate.MODE_NIGHT_NO 夜間モードオフ
AppCompatDelegate.MODE_NIGHT_YES 夜間モードオン
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM システムに依存

 自動切替を実験したところ、22:00に夜間モードに切り替わるようだ。

 

読書尚友 ファイラーの強化

読書尚友の改良の続き。ローカルファイルのファイラを強化し、複数ファイルを選択してコピー、移動、削除等ができるようになった。これでファイラとしては最低限の機能が揃ったと思う。

f:id:hishida:20190206163339j:plain

 まだ課題があるとすれば本棚の改良ぐらいだろうか。

読書尚友 小改良

読書尚友の小改良を続けている。

読み上げの速度と音程の調整

標準の読み上げ速度は日本語だと遅すぎ、英語だと速すぎに感じるので、速度を調整できるようにした。

f:id:hishida:20190206192326j:plain

共著や翻訳者がいる場合の作者一覧の改良

翻訳の場合は著者と翻訳者があるので、作者一覧でそれぞれの一覧が表示できるようにした。

f:id:hishida:20190206192339j:plain



 

読書尚友からの外部辞書検索

Androidの開発環境をMacからWindowsに移行したのを機に、読書尚友の開発をボチボチ再開しようと考えている。

まず手始めに、外部辞書検索ボタンを設けてEBPoketを起動できるようにした。

 

f:id:hishida:20181227182436j:plain

これまでも共有→アプリケーションでEBPocketを選択すれば検索ができたが、2ステップ必要なのと、EBPocketを終了して戻る場合も、戻るボタンを4回押す必要があった。

辞書検索ボタンで起動した場合、直接検索結果画面が開き、戻るボタン一回で画面を終了して戻ることができる。これで辞書引きが苦でなくなった。

f:id:hishida:20181227182450j:plain

本当はポップアップウインドーが開く形にしたかったが、それはまた次の機会にしたい。

EBPocketのAndroid6.0以降での障害について

なお、EBPocketをAndroid6.0以降の環境で初めてインストールするときに、異常終了するケースがあることが判明したので、対応した。今回Windows上にエミュレータ環境を作ったことがきっかけで表面化し、気づくことができた。

Android6.0以降ではストレージに書き込みを行うアプリはパーミッションを与えなくてはならないが、パーミッションを与える前に辞書ディレクトリを生成しようとしていたことが原因だった。

 

 

開発機としてのSurface Pro 6

Surface Pro 6(タイプカバー同梱版)のタイプカバーに初期不良があった件を報告したが、タイプカバーの交換も終わり、開発機としての運用を本格的に始めた。

なお、12月に入ってオンラインストアと正規販売店では期間限定でタイプカバー購入分の18,000円キャッシュバックが始まり、Amazonではサイバーマンデーで旧Serface Proの三点セットが登場するなど、購入タイミングとしては12月になってからのほうがお得だったかもしれない(旧Serface ProはWindows Proというメリットもある)。

pc.watch.impress.co.jp

現時点で一番安価に購入する方法は、ビックカメラ等の店舗でPayPay決済で20%還元を受けて、Microsoftの18,000円キャッシュバックも同時に得る方法だろう(PayPay決済の20%還元は12/13で終了しました)。ヤマダ電機なら、なぜかズワイガニのプレゼントまである。

akiba-pc.watch.impress.co.jp

高DPIでのVisual Studioのフォームデザイナの問題

さてSurface Pro 6だが、性能的には開発機として何の問題もない。難点はWindows10 がProではなくHomeであることで、Hyper-Vが使用できないのがちょっと痛い(Androidエミュレータ等でHyper-Vを使用すると高速化できる)。またOfficeが同梱されているので、すでにOfficeのライセンスを持っている人には無駄になる。WindowsのバージョンやOfficeの有無が選択出来たらありがたい。

使用していて気になったのは解像度が高すぎてディスプレー設定を200%にしないと文字が小さすぎることである。ディスプレー設定を100%以外にする場合、実はVisual Studio のフォームデザイナで自動スケーリングが働いてレイアウトがくずれるという問題がある。Visual Studioを使う時だけ100%にするという方法はSurface Proでは実用にならないので、Visual Studioだけ自動スケーリングを止める方法を探したところ、レジストリ設定で対応できることが分かった。

docs.microsoft.com

code4ward.net

これでVisual Studioのフォームデザイナだけ100%で表示するという運用が可能になった。

Android Studio Windows

次にAndroidの開発環境をMac OS X からWindowsに載せ替えを行った。Windows版のAndroid Studio 3.2をインストールしてソースを移行したところ、NDKも含めて予想外にスムーズに全コンパイルが完了。EBPocket for Android読書尚友Windows上でビルドできるようになった。

これでMacbook Proは、Xcodeが必要なMac OS X用のアプリ(EBMac,EBStudio2 for Mac OS X)とiOS用のアプリ(EBPocket for iOS)をビルドするとき以外は必要なくなり、日常の持ち歩きはSurface Pro 6だけで完結するようになった。

Macbook Pro 13"(Retina, 13-inch, Early 2015) の1.58kgから、1.08kg(タイプカバー込み)まで軽量化したので、通勤やカメラの携行が非常に楽になった。

 追加購入したアクセサリ

通勤で使用すると、職場と家庭にACアダプタが必要になる。また、Surface Proは有線LANが搭載されていないため、USB-LANアダプタも欲しい。ただ頻繁にUSBの抜き差しを行うと一つしかないUSBコネクタが劣化しそうで怖い。

以上の悩みを一気に解決する方法として、少々高価だがSurface Dockを購入することにした。Surface Connectケーブル接続で、HDビデオポートx2、ギガビットEthernetポートx1、USB3.0ポートx4、オーディオ出力x1が利用できる。ただし専用のACアダプタを含めて1kgぐらいあるので、デスクトップの利用限定となる。私の場合、職場にSurface Dockを置き、製品同梱のACアダプタは自宅で使うことにした。 

 ほかに本体保護用にガラスフィルム、背面保護フィルムを購入した。定番アクセサリのスタイラスペンはあまり使わない気がするので購入していない。

あと本体購入後45日以内なら延長保証Microsoft Complete を購入できるが、1年保証が2年保証に延びて15984円(税込)というのは割高な気もする。ただ+5400円でバッテリ交換できるので、保証期間の終わる頃にバッテリ交換すれば20,000円でバッテリ交換できるという考え方もあるので、購入検討中。