logo
 2003年   2004年   2005年   2006年   2007年   2008年   2009年   2010年   2011年   2012年   2013年   2014年   2015年   2016年 
 9月 
 10月 
 11月 
 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月
 
 
 
 
 
アイコンの説明
code:Haemophilus influenzae
ここに書かれていることは無保証です。同じことを行って問題が発生しても、龍義は責任をとりません。

■ 2月1日WindowsNetwork
ここしばらく C# でファイルをダウンロードするプログラムなんかを作っている。 一度データとしてダウンロードして解析するので、webclient を使っているが、 この webclient がたまにエラーを起こす。エラーの内容は。 Microsoft Visual Studio 基礎になる接続が閉じられました: 維持される必要があった接続が、サーバーによって 切断されました というもので、必ず起きるわけではなく1日1回か2回しか起きないから困ったもの。 web で調べてみたけど、詳しい原因がわからない。原因がわからないことには、 対策ができない。うまく発生した状況を捕まえる必要がありそう。
■ 2月2日WindowsWWW
C# の webclient を使ってるとエラーが出るという昨日の続き。昨日は作っていた ので、あまり詳しく調べてなかったけど、今日は検証する時間ができたので少し 詳しく調べてみた。 wireshark を起動して動作させてやってみたところ、うまい具合に3分後に昨日と 同じエラーが発生した。wireshark を眺めてみたところ、 TCP Spurious Retransmission が出ていた。その辺りのパケットを確認すると原因が見えてきた。接続が HTTP/1.1 なので、デフォルトで keep-alive で接続される。そして、しばらくしたら相手の サーバから接続の終了 Fin を送るのだけど、そのタイミングとほぼ同時に GET の 要求をしてしまったことが原因みたい。要求を送信したのに Fin が来たと判断 してしまって 基礎になる接続が閉じられました: 維持される必要があった接続が、サーバーに よって切断されました になったと。確かにエラーの内容からして間違ったことは言ってないな。今回の 場合、見た感じ相手のサーバが keep-alive の時間を2秒に設定しているところも 起きやすさに関係していたみたい。 原因がわかったので、どうやって対策をしようかと悩む。試しに、要求の HTTP ヘッダで Conection: close を付けて送信したけど、サーバは送信が終わっても fin を送ってくる様子がなく、 3秒待ってこっちから RST ACK を送ったところでプログラムが落ちた。それも通信 している部分で落ちていないので、エラーを拾えないし。サーバもサーバだけど、 という感じ。webclient の接続状態を確認してから送信しても、タイムラグが どうしても発生するので同じ気がするし。素直にこのエラーが起きたら再接続を するのが早そうだな。
■ 2月3日WWWOther
先月27日に某社 web サーバののセキュリティについてメールをしたが、現地法人 からも日本法人からも返信が一切ない。そもそも問い合わせの内容を読んでない のじゃないかと思ってきた。 さて、話は変わって。昨日自分のページを眺めていたけど、写真を増やしたせいで 日付の区切りが目立たない。一度色を変えて対応したけど、もう少し目立つように しないと画像に負けてしまっている。昨日少し hr タグの高さを増やしてみて、 今日改めて見てみたら、あまり良い感じじゃなかった。

2/3

梅の花の季節になってきました。
色が変に派手かなと思って、赤い線にしてみたけど、あまり印象が変わらない。 線というか赤の中に文字を入れてみた。
■ 2月3日

梅の花の季節になってきました。
悪くはないか。タグがえらい長くなって嫌な気分が少しするけど。今月はこれで いって、改めて見たときにどう思うかでまた直していこうかと思う。 忘れてた。福は内。
■ 2月4日WindowsWWW
結局、一昨日のコードはこんな感じになった。本当はもっとエラー周りの処理が 色々と入っているけど。 int retry = 0; do{ WebClient wc = new WebClient(); wc.Headers.Add("User-Agent", "Apache-HttpClient/UNAVAILABLE (java 1.4)"); try { resp = wc.UploadData(sendUrl, "POST", postParam); retry = 5; } catch (WebException) { retry++; } wc.Dispose(); } while (retry < 3); wc を Dispose しないで再利用しようとすると、同じエラーが再発生するので、 仕方なくインスタンスの作り直しをしている。
■ 2月5日WindowsOther
C# でのコーディングに区切りがついたので、Android でのアプリを作成する。 少し調べてみると、今 Android のアプリを開発するのに eclipse は時代遅れの ようで、Android Studio を使うのが流行っているみたい。時代の流れに乗って 私も使ってみることにした。 developer.android.com にある Download Android Studio and SDK Tools から android-studio-bundle-141.2456560-windows.exe をダウンロードを始めたら、 サイズが 1.1GB もある。 3時間以上かかって、ようやくダウンロードが完了した。実行してインストール。 必要な容量は 316.4MB なので、ディスクの容量は大丈夫かな。 Android SDK Tools Setup 進んでいって、インストールが始まった。特に問題はなく。 Android SDK Tools Setup 続けて Android SDK Manager が起動された。Build-tools 23.0.2 が入るみたい。 今のところ、他のバージョンが必要なのかわかっていないので、そのまま。 Android SDK Manager Android 6.0 がインストールされるみたい。この API とさっきの Build-tools のバージョンは関係しているのかな。 Android SDK Manager 手元の電話を確認したら、Android 4.4.2 だったので、4.4.2 から 6.0 までを チェックした。 Android SDK Manager これでインストール。なんだか、ダウンロードとかに時間がかかっているので、 続きは明日だな。
■ 2月6日WindowsOther
昨日の続き。朝みたら、インストールがまだ終わってなかった。えらい時間が かかっている。 Android SDK Tools Setup 夜にまた確認したらエラーが出て止まっていた。ネットワークが途切れてエラー でも出たかなと確認しようとしたら、Firefox も落ちている。嫌な予感がして、 ディスクの残り容量を確認したら、300MB を切っている。まさかのディスク不足。 20GB 近く空き容量があったのに。 C ドライブにある大量の PDF ファイルとか移動し、20GB 近く開け、インストール ボタンを押して続きを行う。また、丸1日かかりそう。
■ 2月7日WindowsOther
昨日一昨日の続き。今日も朝確認すると、まだ終わっていない。さらに、容量が だいぶ少なくなっているので、緊急で 20GB を開ける。 夜になって、ようやくインストールが終わっていた。 Android SDK Tools Setup 果たしてどれだけの容量を食い尽くしたのか、インストール先のフォルダである C:\Users\toyota\AppData\Local\Android の容量を見てみた。 Android のプロパティ まさかの 52GB も使っている。ちょっと使いすぎということで、SDK Manager の 中を確認して、Android 6.0 以外の使わなそうな Android TV なんかを削除した。 これで容量を確認してみた。 Android のプロパティ それでも 45GB もある。このフォルダの中を確認すると、それぞれのイメージ ファイルが容量を食っているみたい。様子を見て、不必要だったら他のものも 削除することにして、Android Studio を起動する。しかし、スタートメニュー に Android Studio が見つからない。Android SDK Manager でエラーが起きた ので、インストーラが途中で止まってしまったのかなと思い、一昨日に実行した android-studio-bundle-141.2456560-windows.exe を再実行。 Android Studio Setup Emulator の設定が出てきた。メモリの割り当てが 2GB 推奨のようなので、その まま 2GB で進める。ただでさえ、メモリ容量が足りないのに、また消費要因が 増えるとは。 Android Studio Setup VT-x が有効になっていないと、エラーが出た。少し調べたら、私の PC の場合、 BIOS で無効にしているようなので、再起動しないと有効にできない。後回しに して、先に進む。 Android Studio Setup ようやく Complete Installation と出てきた。過去に使ったことはないので、 インポートせずに進む。 Complete Installation これでやっとインストールの終了となった。長かった。スタートメニューにも Android Studio が入ったので実行。インストールが終わったと思っていたけど、 またダウンロード始めた。また、大きなファイルとかをダウンロードしてなければ 良いのだけど。 Android Studio Setup 思ったよりもダウンロードは早く終わって、途中でエラーが出た。SDK のエラー だから、昨日ダウンロードしてたものかな。retry してみる。 Android Studio Setup The following SDK component was not installed: android-23 retry でうまくいったのか、Quick Start の起動画面になった。新しい Android Studio project の作成をして。 Android Studio Setup Wizard ようやく起動できた。3日がかりだったな。このロゴを見て、一安心したところで まだ先があった。 Android Studio Logo インストールのときにも起きた HAXM のエラーが起きた。まだ VT-x を有効に してないので、PC を再起動して変更しないと。 Android Studio Setup 長くなってきたので、続きは明日。
■ 2月8日WindowsOther
昨日の続き。HAXM を動かすために、PC を再起動した。BIOS 画面で VT-x を有効に する設定を探す。ASUS の bios だけど、最近の bios はマウスも使えて便利と いうか、逆にマウスが使えなかったら不便な感じ。 bios 画面 Intel VT の設定を有効に変更して、PC を起動。Android Studio を起動したが、 同じエラーが出るので、Intel HAXM を探すと C:\Users\toyota\AppData\Local\ Android\android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager にあったので、実行。 Intel HAXM これで、Android Studio を起動してみた。エラーも出ないで、ADV も起動した。 emulator emulator が重いので、リソースモニターを起動してコミットチャージの様子を 確認してみた。 リソースモニター Studio Setup Android Studio で少し上がって、emulator で一気にあがる。Photoshop と一緒に 使ったら、間違いなく落ちそう。 4日かかってようやく目的の開発ができる。
■ 2月9日WindowsOther
慣れない Android Studio で奮闘しながらコードを書いていたら、エラーが出る。 android.os.NetworkOnMainThreadException 調べてみると、Android ではメインのスレッドで通信できないのだとか。色々と コードを変えないといけない。Java のルールに追加して Android のルールを 勉強しなおし。
■ 2月10日WindowsOther
C# で作ったソフトもひと段落した。Release ビルドでできた exe ファイルを 別フォルダに置いて動かそうとしたら、うまく動作しない。何かファイルが足り ないのかと色々コピーをしてみたら、exe.config という拡張子のファイルが必要 みたい。このファイルの中を見てみた。 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net> </configuration> これは確か先月29日に app.config に書いた内容だな。これはコードの中に書く ことができないのか、調べてみたら System.Net.Configuration.SettingsSection の HttpWebRequest.UseUnsafeHeaderParsing で変更できるようなので、やって みた。しかし、System.Configuration.ConfigurationManager が見つからない。 ConfigurationManager 調べてみると、参照設定にも System.Configuration が必要らしい。 参照設定 ということで、参照の追加から System.Configuration を追加する。 参照の追加 これで使えるようになった。コードはこんな感じで、app.config を削除しても 動くようになる。 System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); SettingsSection section = (SettingsSection)config.GetSection("system.net/settings"); section.HttpWebRequest.UseUnsafeHeaderParsing = true; config.Save(); Configuration は何かにぶつかりそうなので System.Configuration.Configuration とした。
■ 2月11日WindowsOther
Android Studio をエミュレータを使って開発をしているが、エミュレータの動作が かなり遅い。実機で動かそうかと、USB で接続するも実行時に選択できない。何が 悪いのだろうと調べてみたら、SDK Platform として実機と同じバージョンを入れ ないといけないらしく。また巨大なサイズじゃないかとビクビクしながらも、 インストールしたら思ったよりサイズは大きくなく、10分ぐらいで終わった。 しかし、まだ実機が選択できない。さらに Google USB Diver も必要らしいので 確認したら、入ってなかったのでインストール。 SDK Manager それでもまだ出てこない。仕方がないので、PC の再起動をしてみた。しかし、 やっぱり出てこない。 基本に戻って、Windows が認識しているのか確認。まずは、マイコンピュータで 表示してみたら、ちゃんと ZTE T815 が出ている。これは前からコピーなんかを するのに使っていたので確認するまでもなく。 マイコンピュータ デバイスマネージャーを起動してみると、MT65xx Android Phone と出ているが、 不明なデバイスの扱い。 デバイスマネージャー web で調べてみると、この MT65xx のドライバを入れるか、さっきインストール した Google USB Driver の inf ファイルを手動で書き換える必要があると。 追加のドライバを入れずに済むので、inf ファイルを書き換えることにした。 それにしても、2016年にもなって inf ファイルを手書きで変更することになる とは。まずは、ハードウェア ID を出してコピー。 デバイスマネージャー C:\Users\toyota\AppData\Local\Android\sdk\extras\google\usb_driver にある android_winusb.inf ファイルに以下を追加した。 ;ZTE T815 %SingleBootLoaderInterface% = USB_Install, USB\VID_19D2&PID_0C02 %CompositeAdbInterface% = USB_Install, USB\VID_19D2&PID_0C02&MI_01 これでドライバの更新をしてみたが、エラーが出た。 デバイスマネージャー そうか、Windows 8 以上だとドライバを勝手に書き換えたら駄目だった。前に できなくて、署名を無効にして再起動したりして無理やりドライバを入れた記憶が よみがえる。これやるの面倒なんだよな。どうしよう。
■ 2月12日WindowsOther
昨日の続き。いつも署名なしドライバの入れ方を忘れてしまって調べながらやる ので、メモ代わりに記録しておく。shutdown /r /o /t 0 をファイル名を指定して 実行から。 ファイル名を指定して実行 オプションの選択からトラブルシューティング。vmware とかで綺麗にキャプチャ したくなる。 オプションの選択 詳細オプションを。 トラブルシューティング スタートアップ設定。 詳細オプション 再起動ボタンを押して、起動するのを待つ。 スタートアップ設定 しばらくすると、スタートアップ設定が出るので、7キーを押して、ドライバー 署名の強制を無効にする、で起動。 スタートアップ設定 起動してきたので、ドライバーの更新から Google USB Driver のフォルダを指定 する。発行元の警告が出るが、インストールする。 Windows セキュリティ これで無事にドライバが入った。 ドライバー ソフトウェアの更新 デバイスマネージャーでも、Android Composite ADB Interface と出て、きちんと 認識している様子。 デバイスマネージャー ドライバの署名が無効な状態なので、一度再起動して Android Studio を起動 した。デバイスが出てきたけど、何だこれは。 The selected device is incompatible とか出ていて、動かせられないし。 Device Chooser おかしなデバイスは何だと思っていたが、スマートフォンを見てみたら、何やら ウィンドウが開いていた。Allow USB debugging? ということで、OK ボタンを 押した。 Allow USB debugging Android Studio でもう一度実行ボタンを押したら、今度はきちんとした名前の デバイスが出てきた。 Device Chooser シリアルナンバーは相変わらずだけど。選択して実行したら、無事に実機から 起動することができた。Android Studio のインストールも長かったけど、実機で 動かすのも面倒だったな。今回の原因の半分は Windows だが。
■ 2月13日WWW
たまには Google 以外の検索エンジンを使って、Goolge との能力差を感じようと baidu にアクセスしてみたが、どこから検索すれば良いのかわからない。 baidu.jp 色々調べたところ、昨年の3月に日本語の検索サービスを終了していたらしい。 世界二位の検索サイトも、日本を前に敗れてしまったのか。
■ 2月14日WindowsOther
普段は画面をいくつも開いていて、デスクトップなんか見ることがないのだけど、 Windows Update が走って再起動が必要とか出ていたので、PC を再起動した。 そこでふとデスクトップを見ていたら、desktop.ini が2つもある。 desktop.ini 同じ場所に同じファイル名というのはありえないので、一体これはどうしたこと かとマイコンピュータからデスクトップを見てみた。 デスクトップ ファイルは1つしかない。ここに2つあれば、cygwin から inode を確認できた のに。デスクトップ上でプロパティを見てみた。 プロパティ1 もう1つ。 プロパティ2 サイズが違うので、別なファイルということになる。ここで場所をみて判明した。 C:\Users\Public\Desktop と C:\Users\toyota\Desktop の其々にあるファイルが 表示されていて、どちらにも desktop.ini があるのでこうなってしまったのか。 すっきりしたような、しないような。
■ 2月15日WWWNetwork
先月27日の続き。ヤマハ韓国 web サイトのセキュリティについて。長いので、 別ページにした。17時の時点で公開予定だったが、と言うか文書自体は先月に 書いたものだったけど、諸事情により伏字を入れての公開とした。対処がされた 時点で伏字は全て削除する予定。 話は少し変わるが、近くに「山と渓谷社」に問い合わせした人がいて、その対応を 見せてもらったけど、かなり良い感じだった。今回のヤマハの対応とは大違いで。 あ、別に「山と渓谷社」に何か問題があったわけじゃなくて、単純なアプリの 質問の対応のこと。
■ 2月16日WWWNetwork
昨日の続きで、長くなったので別ページに。NHK スペシャルに出ていたヤマハ 発動機の人の本音を聞きたいところ。 そうそう、ヤマハのお客様相談室の人にメールアドレスを聞かれて、問い合わせで メールアドレスを書いたけど?と言っても聞いてきたので、NATO の phonetic code で言いますと宣言してから、tango alpha tango sierra uniform などと言って いたら、ポカンとしていた。だってさ、E とか C とか D, B, G, P, T とかって、 電話でなかなか伝わらないし、どうせ録音してるんでしょって感じで。
■ 2月17日Other
Gmail に「Verify your Apple ID」という Subject のメールが4通も届いていた。 spam filter が機能してなかったのかと内容を見ると。
Dear ####### #### Ali,
You recently selected #######@gmail.com as your new Apple ID. To verify this email address belongs to you, click the link below and then sign in using your Apple ID and password.

Verify now >

Why you received this email
Apple requires verification whenever an email address is selected as an Apple ID. Your email cannot be used until you verify it.
If you did not make these changes or if you believe an unauthorised person has accessed your account, you should change your password as soon as possible from your Apple ID account page at https://appleid.apple.com.

Sincerely,


Apple Support
リンク先のアドレスは、id.apple.com だし spam じゃなくて誰かが間違えて私の Gmail アドレスを入力しただけかな。これ、親切に verify してあげたらどう なるのだろう。
■ 2月18日WWWOther
ヤマハ韓国がようやく対応したので、15日の記事の伏字は消した。今日も少し 色々あったので、別ページに書くことにした。
■ 2月19日Other
ここのところ色々遊んで Android のアプリを作っている。これまで完成していた ものをいじったりして変更することはあったけど、0 からちゃんとしたものを 作るのは初めて。慣れていないのもあるけど、思っていたような動作ができない ことが多く、かなり時間がかかる。 例えば、ActionBar のロゴをタップできるように、 getActionBar().setHomeButtonEnabled(true); としたら、左側に大きな矢印が出てきたり。 ActionBar 「←」じゃなくて「<」が出て欲しいのに。他に ListView で右にスワイプしたら 戻るようにイベントを捕まえてできたのだけど、肝心の ListView がタップでき なくなったり、ListView の項目の一番右に「>」を入れたいのだけど、どうすれば 入れられるか、とかそんな感じでかなり手間取って。Android のバージョンの 違いも考えないといけないので、頭がいっぱい。
■ 2月20日ElectricOther
普段はあまり観ていないテレビで BS 放送を見るときには、BS アンテナからの ケーブルを繋ぎかえてカードを入れ替えたりする。カードはまだしも、アンテナ への線を繋いで給電を on にするのが少し面倒。そもそもアンテナを外したとき テレビからの給電を off にする必要がないのかもしれないけど、やっておいた方が 良いかなと。 色々煩わしいので、給電って太陽光発電でできないかな、と考えた。まず、製品の 消費電力を確認してみる。東芝の BCA-453A の場合だと、15V の 1.5W 以下と あった。24時間使っても、15V 2.4AH なので、単二形のニッケル水素を13本ぐらい 使えば動くことになる。数m とかの長いアンテナケーブルを使うことが多く、 電圧降下のことを考えると 12V ぐらいで動くように設計されてそうな気もする けど。 太陽光発電のパネルを設置する必要があるが、アンテナ自体は必ずと言ってよい ほど陽の当たる場所にあるから、反射面を太陽光発電パネルにしてしまえば場所の 確保は問題なさそう。曲面加工をするのは個人じゃ無理そうだから、どこからか 製品を出してくれないと無理だけど。すぐにやるとすると、パネルを別で設置 して、電池に溜めて給電する感じかな。
■ 2月21日Windows
C# で作った exe ファイルを、ほとんど使っていない Windows 8.1 の別 PC に コピーして、実行した瞬間に落ちた。 動作を停止 問題の詳細を表示してみたら、問題イベント名が CLR20r3 になっていて、聞いた ことがない。 問題の詳細を表示 stackoverflow を眺めていたら、CopyLocal=true の設定を確認するとあるが、 そもそも CopyLocal の設定がない。NuGet 用の設定なのかな。30分ぐらい調べた けれど、後日に持ち越すことにした。
■ 2月22日Windows
昨日の続き。寝ているときに権限的な問題かもと思いついたので、今日やって みることにした。動かなかったプログラムを管理者権限で実行をしてみたら、 あっさりと動いた。やっぱり権限の問題みたい。そして、管理者権限で実行を したときに、実行したフォルダに tbrowser.exe.config というファイルが作成 された。なんとなく読めてきた。この問題のプログラムをダウンロードフォルダに コピーして、管理者権限を使わずに実行したら問題なく動作して、.exe.config ファイルが作られた。 原因は Program Files のフォルダで実行したときに、.exe.config ファイルを 作成しようとして、権限がないことのようである。 そもそも、この .exe.config ファイルはなくても動作するようにコードを追加 した。それが2月10日に書いたことで、この部分を見直したら、最後に config.Save(); をしている。そこで .exe.config ファイルが作られるようなので、その部分を 削除してビルドし、今回問題がおきた PC の Program Files 以下にコピーして 実行をしてみた。落ちずに起動して、通信時の問題も大丈夫そう。ということで 解決した。
■ 2月23日Electricother
電力自由化が始まるとかで、家のポストにもチラシが入れられたりして、各社 色々とやっているみたい。東京ガスとか ENEOS でんきとかで料金を出してみた けれど、使っている電気量が少ないためか、そんなに安くならない感じ。家が サービス範囲に入っている会社はどのぐらいあるのか調べてみたら、13社もある みたいで、ADSL が始まった頃みたいな雰囲気。旅行会社の HIS までもが手を 出したりしていて、10年後に果たしてどこが残っているのかと考えてしまう。 電気メータの交換が必要で、最初の混乱で電気が来なくなるとかあると嫌だし、 手間とかを考えると、少し様子を見てから決めようかな。
■ 2月24日Other
未だ Android Studio と格闘中で。画像を表示して、ピンチインとかをさせよう かと思ってたけど、自分でゴリゴリ書かないといけないことが判明。参考になる web サイトがいくつもあるので問題はないのだけど、このぐらいは Android で 用意して欲しいところ。 で、そのピンチアウトで画像を拡大させると、スライドさせて画像の位置を移動 できるようにしたくなる、というか、ほとんどのアプリでそんな実装。そこで 1つ問題が出てしまう。例えば、画像と説明がある画面だったとして。
縦長の画面
表示範囲はこの半分ぐらいの画面だとして、ピンチアウトで画像を拡大後、下の 説明の部分まで画面をスクロールしたい場合、どういう動きにさせれば良いのか 悩んでしまう。画像の拡大位置をそのままで、下の説明を見たい場合があるので、 画像を一番下までスクロールしきったら画面をスクロールするのも嫌だし、かと 言って、ピンチインで拡大を戻して画像を元のサイズに戻してからスクロール させると画面が動くのも嫌だし。2本指でのスクロールで対応するとかになるの だろうか、悩んでしまう。
■ 2月25日Other
ここのところの Android の話で。TableLayout の中に TextView を動的に配置 していて、表を作成した。端末を回転させたら、この表のセルも幅を広げたり して見やすくしたい。このとき、 textView.setWidth(100); と TextView のサイズを広げてみたけど、幅が変化しない。テーブルの各行を 拾って、それぞれのセルのサイズを変化させる必要があるみたい。動的に配置 しているのもあるので、色々と面倒。こんな感じになった。まずは、メインの xml は。 <TableLayout android:id="@+id/personTableLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="2" android:shrinkColumns="2"> </TableLayout> そして、差し込むテーブルは。 <?xml version="1.0" encoding="utf-8"?> <TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/name" android:layout_width="100dp" android:textSize="12sp" android:text="Toyota"/> <TextView android:id="@+id/address" android:layout_width="100dp" android:textSize="12sp" android:ellipsize="end" android:text="Yokohama"/> <TextView android:id="@+id/telno" android:textSize="12sp" android:text="nnn-nnnn-nnnn"/> </TableRow> とってきたデータを TableLayout tableLayout = (TableLayout)findViewById(R.id.personTableLayout); tableLayout.addView(長いので省略); で行を増やしていく。端末を回転させたりしたときに、テーブルの最初の2列の 幅を広げる。dp 指定をしたいために、DisplayMetrics を使ったりと。 DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); TableLayout tableLayout = (TableLayout)findViewById(R.id.personTableLayout); for (int i = 0; i < tableLayout.getChildCount(); i++) { TableRow personalTableRow = (TableRow)tableLayout.getChildAt(i); for(int j = 0; j < personalTableRow.getChildCount(); j++){ View tableCell = personalTableRow.getChildAt(j); if((j == 0) || (j == 1)){ TableRow.LayoutParams cellLayoutParams = (TableRow.LayoutParams)tableCell.getLayoutParams(); cellLayoutParams.width = (int)(150 * displayMetrics.density); tableCell.setLayoutParams(cellLayoutParams); } } } 最初の for 文は不要で、各行に対して行うのではなく、1行でもセルの幅を変更 すれば、全ての列の幅が変更された。実際のプログラムは高さも変えているので 念のためもあり、全ての行でも幅を変更している。 この列は固定文字数なので○dp、ここは最大○文字なので余裕があれば○dp、と weight で指定できないことも多いので、必要になった感じ。
■ 2月26日Other
画像をピンチアウト・ピンチインする実装はやめて、全画面拡大のボタンを付け ようかと。しかし、拡大ボタンの位置がどうも。こんな感じで、RelativeLayout 上に画像を画面幅に合わせて配置して、高さは 200dp 固定。その右下に拡大する ボタン画像を 40dp 角で入れた。 <ImageView android:id="@+id/mainImage" android:layout_width="match_parent" android:layout_height="200dp" android:src="@drawable/d2016022601" android:layout_alignParentTop="true" android:layout_centerInParent="true" /> <ImageView android:id="@+id/buttonImage" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/d2016022602" android:layout_alignRight="@id/mainImage" android:layout_alignBottom="@id/mainImage" /> これで表示すると、画像の外に出てしまう。できれば、画像内に収めたい気が する。
画像表示
特に縦長の画像だと違和感ありで。
画像表示
大きい画像の ImageView の layout_width を match_parent から wrap_content に変えてみても同じ結果。位置を画像のサイズから計算して、ボタンを配置する ことができるけれど、もっと簡単な方法がないものかと調べて、layer-list を 使ってみることにした。まずは、layer-list を drawable に作成。 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/imageFlower" android:layout_width="match_parent" android:layout_height="match_parent" android:drawable="@drawable/d2016022600"> </item> <item android:id="@+id/zoomButton"> <bitmap android:id="@+id/zoomBitmap" android:layout_width="40dp" android:layout_height="40dp" android:gravity="right|bottom" android:src="@drawable/d2016022602" /> </item> </layer-list> これを ImageView に設定。ボタンが2つあるのは、画像を切り替えするための もの。そのコードは割愛。 <ImageView android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="200dp" android:src="@drawable/image_layer" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/imageView" android:text="Photo 1"/> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/button1" android:text="Photo 2"/> これでやってみた。
画像表示
どうも元の画像のサイズ比になってしまう感じで。縦にしてしまうと、さらに 顕著になった。
画像表示
layer-list にあ最初の item の layout_width とか layout_height をいじって 高さを 200dp にしたり、wrap_content にしたりとやってみたけど、変わらず。 何か良い方法はないもんかな。
■ 2月27日Other
昨日の続きと言えば、続き。Android で画像をフルスクリーンで表示したい。 ちょっと躓いたので、テストがてら新規のアプリで作成してみた。 作成するときに、ちょっと悩んだけど Empty Activity を選んだ。 Create New Project xml はこんな感じ。 <Button android:id="@+id/fullScreenButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="full screen" /> <ImageView android:id="@+id/flowerImageView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:src="@drawable/d2016022700" /> まずは簡単にボタンと画像の切り替えを用意する。 public class MainActivity extends AppCompatActivity { Button fullScreen; ImageView flowerImage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fullScreen = (Button) findViewById(R.id.fullScreenButton); flowerImage = (ImageView) findViewById(R.id.flowerImageView); flowerImage.setVisibility(View.INVISIBLE); fullScreen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fullScreen.setVisibility(View.INVISIBLE); flowerImage.setVisibility(View.VISIBLE); } }); flowerImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fullScreen.setVisibility(View.VISIBLE); flowerImage.setVisibility(View.INVISIBLE); } }); } } これで切り替えができた。ボタンを押すと。
Button
画像に切り替わって、画像をタップするとボタンに戻る。
ImageView
ここからが本題。クリックしたら、フルスクリーンで表示したい。表示されて いる RelativeLayout の背景を黒くして、WindowSystemUiVisibility の設定を 保存してからフルスクリーンにする。古いバージョンでは動かないことは少し 置いて、こんな感じ。 fullScreen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mainLayout.setBackgroundColor(Color.parseColor("black")); backupUiVisibility = mainLayout.getWindowSystemUiVisibility(); mainLayout.setSystemUiVisibility( View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); fullScreen.setVisibility(View.INVISIBLE); flowerImage.setVisibility(View.VISIBLE); } }); これで Nexus 5 のエミュレータではフルスクリーンになったけど、手元の Android 4.4.2 の端末では、表示が消えるだけで白い帯が残ってしまった。
full screen
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN なんかを指定してみたけど、結果は 変わらなかったので、先に ActionBar を消すことに。 getActionBar().hide(); を入れて実行してみたら、getActionBar で null が返ってくるようで、落ちた。 調べると、MainActivity extends AppCompatActivity と AppCompatActivity を 継承している場合は、getActionBar じゃなくて getSupportActionBar を使う とのこと。やってみたら、エミュレータでは申し分ない感じに、実機ではやっぱり 白い帯が残った。
full screen
黒なら目立たないのに、嫌な感じだな。
■ 2月28日Other
昨日の続き。白い帯は消せないかと web で調べて、 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); を追加して、実行してみた。
full screen
左右の padding を消したいな。これは RelativeLayout の padding のようだから setPadding で 0 を指定して、ようやく仮完成。
full screen
戻すことも考えてないといけないので、戻すコードを入れた。行が長くなった ので、タブを少しいじって、こんな感じ。 public class MainActivity extends AppCompatActivity { Button fullScreen; ImageView flowerImage; RelativeLayout mainLayout; int backupUiVisibility = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fullScreen = (Button) findViewById(R.id.fullScreenButton); flowerImage = (ImageView) findViewById(R.id.flowerImageView); flowerImage.setVisibility(View.INVISIBLE); mainLayout = (RelativeLayout) findViewById(R.id.relativeLayout); fullScreen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mainLayout.setBackgroundColor(Color.parseColor("black")); backupUiVisibility = mainLayout.getWindowSystemUiVisibility(); mainLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); mainLayout.setPadding(0, 0, 0, 0); getSupportActionBar().hide(); fullScreen.setVisibility(View.INVISIBLE); flowerImage.setVisibility(View.VISIBLE); } }); flowerImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mainLayout.setSystemUiVisibility(backupUiVisibility); mainLayout.setBackgroundColor( getResources().getColor(android.R.color.background_light)); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); int leftRightPadding = (int)(getResources().getDimension( R.dimen.activity_horizontal_margin)); int topBottomPadding = (int)(getResources().getDimension( R.dimen.activity_vertical_margin)); mainLayout.setPadding(leftRightPadding, topBottomPadding, leftRightPadding, topBottomPadding); getSupportActionBar().show(); fullScreen.setVisibility(View.VISIBLE); flowerImage.setVisibility(View.INVISIBLE); } }); } } まだ完成ではなく、バージョン依存してる getWindowSystemUiVisibility() と、 deprecated な getResources().getColor を直して完成かな。
■ 2月29日NetworkOther
そろそろ Android のアプリが完成しそうな感じがあるので、Google Play への 登録を調べてみた。デベロッパー登録に25米ドルかかるらしい。有料アプリとか 広告が入ったアプリを登録する人からだけにすれば良いのに。でも、Apple の ことを考えると安いものか。作成してみたが、登録完了待ち。
21st projects Tatsuyoshi Networks Prompt Works
by Tatsuyoshi since 2003