2010年12月4日土曜日

Android App: Kanji Viewer

拙作のAndroidアプリ「漢字ビューワ」の紹介
字をでっかく表示します。それだけです。

横表示とかも。

白黒反転したり、フォントを変更したりできます。
スクリーンショットは筆順フォント(http://sites.google.com/site/nihilistorguk/)を使いました。

ダウンロード:
http://market.android.com/details?id=jp.mstssk.kanji_viewer
(published for japanese Android market only.)

TODO:
・Galaxy Tabなど画面サイズがアレな端末への対応

<追記 2010-12-12>
何故かiPhone版が出来ました。
http://mkkptechnote.blog12.fc2.com/blog-entry-9.html

Android app's selector.xml

Androidアプリで自前でボタン用の画像なんかを用意した場合に、
・フォーカスがあった状態
・押された状態
・通常の状態
を定義するのには、以下の様なXMLファイルを作ってやったりします。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- bad order -->
    <item android:state_focused="true" android:drawable="@drawable/item_focused" />
    <item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
    <item android:drawable="@drawable/item_normal" />
</selector>

そして、ここで落とし穴。

ファイル中のitem要素はボタンの状態が変化した際に上から順に評価されていき、状態に合致するものを見つけたら、それ以降のitemは見に行きません。

http://developer.android.com/intl/ja/resources/tutorials/views/hello-formstuff.html
Note: The order of the elements is important. When this drawable is referenced, the s are traversed in-order to determine which one is appropriate for the current button state. Because the "normal" image is last, it is only applied when the conditions android:state_pressed and android:state_focused have both evaluated false.

具体的には、上のitemの順序の場合には、「フォーカスがあった状態で押す」という事をした時には、state_focusedが選択されてしまい、「押してんのに押した場合用のエフェクトにならない」という不具合が起きてしまいます。
対応策としては、state_pressedの優先順位を上げたいので、まぁ順序を変えてやればいいだけの話。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- correct order -->
    <item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/item_focused" />
    <item android:drawable="@drawable/item_normal" />
</selector>