キーボードが閉じられるのを検知したい
以前作ったアプリでは
レイアウトのDisplayサイズとViewサイズの差から
ソフトウェアキーボードの表示有無を取得してたんですが
今回SufaceView上で入力操作をしたくて
Dialog上に配置したコントロールを経由して入力を取ろうとしたとき
先のようなキーボード有無の検知がどうもできなくてどうしたものかと
やれるとしたら入力で配置したEditTextのコントロールくらいだろう、と
いろいろしてみた
◆閉じられる契機
・キーボードの完了おしたとき
・バックキーおしたとき
・キーボード以外の領域をおしたとき(4系のみ)
◆2系と4系のバックキーの挙動の違い
(AlertDialogの上にEditTextのっけてる場合)
4系ではバックキーのイベントがAlertDialogまで飛んでくる
2系では飛んでこない
さて
●こうした
EditText extendしたクラスを用意してonKeyPreImeも書き換えて
そんなかにキーボードが閉じられた時の処理書いた。。。もぉこれでいっかぁ
●あとがき
いいのか、これで
閉じられる契機が心配
BluetoothとかのHWキーボードの場合とか考慮してね
IMEのアプリによって挙動かわらんよな。。。たぶん
<検証結果> ●4系 ・▽のとき(バックキーなのか?) EditText.onKeyPreIme AlertDialog.OnKeyListener:KEYCODE_BACK ・Doneのとき EditText.OnEditorActionListener:IME_ACTION_DONE ・ダイアログ範囲外 かってに閉じる ●2系 ・バックキー EditText.onKeyPreIme ・完了のとき EditText.OnEditorActionListener:IME_ACTION_DONE ・ダイアログ範囲外 反応しない
レイアウトのXMLでエラーした
こんなエラー
No orientation specified, and the default is horizontal. This is a common source of bugs when children are added dynamically.
対象のレイアウトはこれ
<LinearLayout android:id="@+id/LinearLayout01" android:background="#00000000" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:gravity="center" > <LinearLayout android:id="@+id/LinearLayout02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" /> </LinearLayout>
メッセージの通りLinearLayout02の方にもorientationしてみる
<LinearLayout android:id="@+id/LinearLayout01" android:background="#00000000" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:gravity="center" > <LinearLayout android:id="@+id/LinearLayout02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:orientation="horizontal" /> </LinearLayout>
で直った
Android4.4のSDKいれたら出たエラー
VirtualBoxのゲストOSのディスクを拡張する
vboxのゲストOSのディスクが足りなくなったので
リサイズしようと思ったんだけど
結構めんどくさかったのでメモ
■構成
host : windows7
guest: ubuntu13.04
でguestのdisksizeを20G -> 40Gに変更 にしてみる
①まずゲストOS停止
sudo halt
②VDIのサイズ変更
VBoxManage modifyhd "C:¥Users¥XXXXX¥VirtualBox VMs¥ubuntu13.04¥ubuntu13.04.vdi" --resize 40960
※VDIのファイル名だけでいけるかと思いましたが違うパスを参照しようとする為
フルパスで記述しています
>0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
な感じに100%と出力されればOK
③ゲストOSのディスク操作
virtualboxの設定いじっただけではゲストOS上認識されないので
gparted-live-0.16.1-1-amd64.iso ってやつを使いました
下記URLからGPartedのLiveをダウンロード
http://gparted.sourceforge.net/
④CD/DVDにダウンロードしたISOをマウントして起動
>Don't touch keymap
>15: Japan
>0: X起動
⑤Gpartedの操作(GUI)
<状態>
/dev/sda1 ext4
/dev/sda2 extended
/dev/sda5 linux-swap
未割り当て
>/dev/sda5 を選択してDELETE
>/dev/sda2 を選択してリサイズ/移動で一番後方に移動させる
/dev/sda1 ext4
未割り当て
/dev/sda2 extended
未割り当て
>/dev/sda1 を選択してリサイズ/移動で大きくする(20->40G)
>/dev/sda2配下の未割り当てを選択して パーティション作成(linux-swap)
>適用(しばらく待つ)
<状態>
/dev/sda1 ext4
未割り当て (1Mくらいあまった)
/dev/sda2 extended
新規パーティション linux-swap
未割り当て (1Mくらいあまった)
ここで終わりとみせかけて
⑥fstabの修正
※swap移動させたのでUUIDが変わってる
Gparted内のTerminal起動して
>sudo mount /dev/sda1 /mnt
>sudo vi /mnt/etc/fstab
※「UUID=XXXX none swap sw 0 0」となってる部分をコメントアウトして
※「/dev/sda5 none swap sw 0 0」にする
⑦Gparted終了
※左上に電源落とすアイコンがあるのでダブルクリック
⑧で普通にゲスト起動
>swapon -s
※「/dev/sda5 」が認識されてればOK
>df -k
※ディスクサイズも確認!!
⑨でfstabをUUIDの形式に戻す
UUID確認
>sudo blkid
※「/dev/sda5: UUID=XXX」
fstab修正
>sudo vi /mnt/etc/fstab
※「UUID=XXXX none swap sw 0 0」でXXXを変更して有効化
※「/dev/sda5 none swap sw 0 0」は無効化
再起動して
>swapon -s
※で認識されてれば終了!!
で終わりとみせかけて
⑩dfうつとエラーが
「df: `/run/user/lightdm/gvfs': Permission denied」>こんなんが出るようになったので
GuestAdditionを再度インストール
で、なおった
終わり
1年前のCakePHP2系で作ったプロジェクト
cakephp2系を使った失敗構成
@shareにこだわったわりに似たようなメソッドが微妙に名前を変えて実装される
shareが実装後半で肥大化する恐怖
@const用意しすぎてカオス
まぁ思い出ということで・・・
構成的には
・フロント向けアプリケーション
・バックエンド向けアプリケーション
・API向けアプリケーション
・バッチ向けアプリケーション
・コアモジュール
・環境変数
・共通モジュール
ってな感じにわけた
ディレクトリで見ると
・アプリケーション
app_batch
app_front
app_admin
app_api
┣Config
┃┣bootstrap.php # env/bootstrap.php をrequire
┃┣const.php # 普通に定義(Configure使って)
┃┣core.php # 空ファイル
┃┣database.php # 空ファイル
┃┗…
┣Console
┣Controller
┣Error
┣Locale
┣Test
┣View
┣tmp
┗webroot
・コア
core
・環境変数
┣bootstrap.php
┣const.php
┣environment.php # 環境名だけ定義(=ディレクトリ名) ex.)local
┗local or test or prod
┣const.php
┣core.php
┗database.php
・共通モジュール
share
┣Controller
┣Datas
┣Lib
┣Model
┣Plugin
┣Vendor
┗View
★const3つもある(読み込み中に列挙)
env/const.php # 共通
[APP]/Config/const.php # プロジェクト依存
env/[ENV]/const.php # 環境に依存
TimeMachineで「sparsebundle”はすでに使用中です。」になる
TimeMachineのバックアップでエラーしていた。
メッセージは「sparsebundle"はすでに使用中です。」。
端末再起動しても直らなかったので、
TimeMachineの方を再起動かけたら直りました。
TimeCapsuleを選択してメニューから ベースステーション>再起動
でやりました。(少し時間かかりました)
原因不明
<環境>
OS X 10.8.2
TimeCapsule Version 7.6.1
ubuntu12.04(x64)にplv8入れてみる
Postgresでjavascriptが書けるってやつを試してみました
まずは環境作りから
※postgresql9.1インストール済
V8 Engineインストール
sudo apt-get install python scons gcc g++ svn cd /usr/local/src svn checkout http://v8.googlecode.com/svn/trunk/ v8 cd v8 scons mode=release library=shared snapshot=on arch=x64 sudo cp libv8.so /lib/
PL/V8インストール
sudo apt-get install mercurial sudo apt-get install postgresql-server-dev-9.1 cd /usr/local/src wget https://plv8js.googlecode.com/files/plv8js-20120719.tar.gz tar zxvf plv8js-20120719.tar.gz cd plv8js make sudo make install sudo cp -pR /usr/local/src/plv8js/sql /usr/share/postgresql/9.1/contrib/plv8js
インストールしたモジュールPostgresに追加
cp -p /etc/postgresql/9.1/main/postgresql.conf /etc/postgresql/9.1/main/postgresql.conf.org sudo /etc/init.d/postgresql stop vi /etc/postgresql/9.1/main/postgresql.conf >> custom_variable_classes = 'plv8' sudo /etc/init.d/postgresql start
んじゃDBにも関数とか反映
sudo su - postgres psql -c 'CREATE EXTENSION plv8' -d データベース名 psql -f /usr/share/postgresql/9.1/contrib/plv8js/plv8.sql -d データベース名
これで一通り準備は完了したのでJSしてみる
READMEにあったやつ
CREATE OR REPLACE FUNCTION plv8_test(keys text[], vals text[]) RETURNS text AS $$ var o = {}; for(var i=0; i<keys.length; i++){ o[keys[i]] = vals[i]; } return JSON.stringify(o); $$ LANGUAGE plv8 IMMUTABLE STRICT; SELECT plv8_test(ARRAY['name', 'age'], ARRAY['Tom', '29']); plv8_test --------------------------- {"name":"Tom","age":"29"} (1 row)
とりあえずループ文
CREATE OR REPLACE FUNCTION plv8_test(startval integer, endval integer) RETURNS integer AS $$ var o = 0; for(var i=startval; i<=endval; i++){ o += i; } return o; $$ LANGUAGE plv8 IMMUTABLE STRICT; SELECT plv8_test(1,10); plv8_test ----------- 55 (1 row)
とりあえずJS関数
CREATE OR REPLACE FUNCTION plv8_test() RETURNS text AS $$ var dd = new Date(); return dd.toLocaleString(); $$ LANGUAGE plv8 IMMUTABLE STRICT; SELECT plv8_test(); plv8_test ----------------------------------------- Tue Sep 18 2012 11:39:24 GMT+0900 (JST) (1 row)
とりあえず自前関数
CREATE OR REPLACE FUNCTION plv8_test() RETURNS text AS $$ var aa = "first"; sage(); hoge(); return aa; function hoge(){ aa = "hoge"; } function sage(){ aa = "sage" } $$ LANGUAGE plv8 IMMUTABLE STRICT; SELECT plv8_test(); plv8_test ----------- hoge (1 row)
変数のスコープ回りを試してみる
CREATE OR REPLACE FUNCTION plv8_test() RETURNS text AS $$ var aa = "first"; sage(); hoge(); return aa; function hoge(){ var aa = "hoge"; } function sage(){ var aa = "sage" } $$ LANGUAGE plv8 IMMUTABLE STRICT; SELECT plv8_test(); plv8_test ----------- first (1 row)
生成結果
\df plv8_test List of functions Schema | Name | Result data type | Argument data types | Type --------+-----------+------------------+----------------------------------+-------- public | plv8_test | text | | normal public | plv8_test | text | keys text[], vals text[] | normal public | plv8_test | integer | startval integer, endval integer | normal (3 rows)
個人的には配列周りが描きやすくなるかもねって感想です
※参考サイト(ここのWiki)
https://code.google.com/p/plv8js/